0

本当に簡単な質問ですが、先読みとは異なるテーブルで動作するように先読みを設定するにはどうしたらいいですか?角度UI-ブートストラップの先読みテーブル

たとえば、テーブルに外部キーがあり、外部キーのプライマリテーブルのそれぞれのNAME値に基づいてユーザーがこのキーを選択できるようにしたいとします。

コード例:この例では

<table class="table table-bordered table-hover table-striped rwd-table" id="page-wrap"> 
<thead> 
    <tr> 
     <th>Primary ID</th> 
     <th>Foreign Key (As Name)</th> 
    </tr> 
</thead> 
<tbody> 
    <tr ng-repeat="p in PrimaryTable" id="display"> 
     <td data-th="ID">{{p.PrimaryID}}</td> 
     <td> 
      <input id="ForeignKeyName" 
        type="text" 
        ng-model="p.ForeignKeyID" 
        uib-typeahead="f.ForeignKeyID as f.ForeignKeyName for f in ForeignKeyTable | filter:$viewValue"        
        class="form-control"> 
     </td>     
    </tr> 
</tbody> 

、私は、ユーザーが名前の値の代わりに、ID値として「(名前など)外部キー」を参照してくださいしたいと思います。トリックは、基になる値をIDにして、ngモデルによって通知された元の値に一致させるようにマッピングしたいということです。

UPDATE:前のバージョンと一致する別の質問は、PrimaryTable.ForeignKeyIDの代わりにForeignKeyTable.ForeignKeyNameを表示するようにng-modelを設定する方法です。

これは、uib-typeaheadがForeignKeyTable.ForeignKeyIDForeignKeyTable.ForeignKeyNameとどのように一致するのか(2つの別々のテーブルと同じですか?)私が望むだろうか

ng-model: PrimaryTable.ForeignKeyID as ForeignKeyTable.ForeignKeyName

+0

私は本当にこのコンセプトを理解していません。 'PrimaryTable'と' ForeignKeyTable'に保存されているサンプルデータを共有できますか?彼らは何らかの形で関連していますか? – nocodename

+0

基本的にプライマリテーブルには、ForeignKeyTableのIdentifying IDカラムにリンクするカラムが含まれています。つまり、PrimaryTableの行は{ID:1、ForeignKeyID:18、...}となり、対応するForeignKeyTable行は{ForeignKeyID:18、ForeignKeyName: 'Apple'、...}となります。このデータを使用して、基本的には、ユーザーが 'Apple'をタイプ/選択できるようにしたいと考えています。テーブルが使用する対応する値は18でなければなりません。 – Austin

+0

ただし、この値は 'PrimaryTableRow.ForeignKeyID'または' ForeignKeyTableRow.ForeignKeyID '? – nocodename

答えて

1

まず最初は、PrimaryKeyTable行、ユーザが先行入力で値を選択するたびに更新されます置くことができるようにすることです。選択したアイテムをキャッチして、ForeignKeyIdの値をPrimaryTableの行に手動で割り当てる必要があります。 これを行う方法は、あなたの先読みにtypeahead-on-selectディレクティブを追加し、それを値を割り当てる関数にバインドすることです。

それは次のようになります。

HTMLあなたのコントローラ内部

<tr ng-repeat="p in PrimaryTable" id="display"> 
    <td data-th="ID">{{p.PrimaryID}}</td> 
    <td> 
     <input id="ForeignKeyName" 
        type="text" 
        ng-model="selectedItem" <!-- could be anything really for we will not use it here --> 
        uib-typeahead="f.ForeignKeyID as f.ForeignKeyName for f in ForeignKeyTable | filter:$viewValue" 
        typeahead-on-select="onSelect($item, $model, $label, p)"        
        class="form-control"> 
    </td>     
</tr> 

$scope.onSelect = function($item, $model, $label, primaryKeyTableRow) { 
    primaryKeyTableRow.ForeignKeyId = $item.ForeignKeyId; 
} 

次のステップに対応しForeignKeyTable行のnameプロパティ値を表示することですForeignKeyId f各行にPrimaryKeyTableと書かれています。適切な項目を見つけるためにForeignKeyTableをフィルタリングしなければならないので、そのロジックをコントローラの中に入れることは良い考えです。対応する名前を表示する複数の行があるため、各行ごとにForeignKeyTableを別々にフィルタリングする必要があります。これはng-repeatng-controllerが便利な場所です。ここでは、ng-repeatによって生成された各テーブル行に対して新しいコントローラをバインドし、そのコントローラ内にロジックを配置します。 HTMLでは、次のようになります。

<tr ng-repeat="p in primaryKeyTable" ng-controller="itemController"> 
    <!-- ... --> 
</tr> 

そして、我々は、JSファイルに新しいコントローラを定義する必要があります:

app.controller('itemController', function() { 
    // ... 
}); 

今、私たちはテーブル内のローごとに別々のロジックを持つことができます。だから、ForeignKeyTableをフィルタリングして対応するアイテムを見つけてその名前を表示する場所です。

全体のコードは、私がplunkerに入れてきたような大きさであるので: http://plnkr.co/edit/xccgnpxoPHg6vhXWPwZn?p=preview

は、あなたがそれで何ができるかを参照してください。

+0

ありがとうございます。これにより、ドロップダウンから選択する際に正しいIDを割り当てることで問題が解決しました。私はまだ実際のテーブルの 'PrimaryTable.ForeignKeyID'の代わりに' ForeignKeyTable.ForeignKeyName'を表示する 'ng-model 'に問題があります。それを行う簡単な方法はありますか? 'ng-model = $ label'を試しましたが、うまくいかないようです。 – Austin

+0

質問を更新することができますので、コードを見ることができますか? – nocodename

+0

質問を更新しました。うまくいけば、私が探しているものを説明するのに役立ちます。基本的には、前にng-modelで持っていた 'ForeignKeyID'の代わりに' ForeignKeyName'を表示したいだけです。 – Austin

関連する問題