2016-05-01 7 views
1

角度UI typeaheadディレクティブを使用しています。私は先のドロップボックスにいる人のリストを持っています。人々のリストは、LastNameFirstNameCustomerNumberなどのようなプロパティを持つオブジェクトの配列です(私のドメインは完全に異なっており、これは分かりやすくするためのものです)。角度UIの先読みで選択時にテキストボックスにデータが入力されない

<input type="text" ng-model="vm.selectedCustomer" 
    typeahead-append-to-body="true" 
    uib-typeahead="i.LastName for i in vm.lstCustomers | filter:$viewValue" /> 

しかし、私は先着先のDropboxにもっと多くの顧客情報を示したいと思います。さんが言ってみましょう、私はコントローラ内の機能を持っている:

vm.getFullName = function(customer) { 
    return customer.LastName + ", " + customer.FirstName + " - " + customer.CustNumber; 
    } 

と、対応するディレクティブ:選択が行われると

<input type="text" ng-model="vm.selectedCustomer" 
    typeahead-append-to-body="true" 
    uib-typeahead="vm.getFullName(i) for i in vm.lstCustomers | filter:$viewValue" /> 

、モデルが正しく読み込まれます。テキストボックスにはundefined, undefined - undefinedと表示されます(奇妙なことに、構造はgetFullName()が空の値に適用されたように見えます - カンマとダッシュで)。

私はlstCustomersのすべての要素を通過し、(getFullNameを適用した場合)、すべてが再び正常に見える:

var lstCustomersFlat = []; 
for (i = 0; i < vm.lstCustomers.length; i++) { 
    var customer = vm.getFullName(vm.lstCustomers[i]); 
    lstCustomersFlat.push(customer); 
} 

しかし、私はそれを行う必要はありません、私がすべき?私は何かを逃しているのですか、あるいはバグを見つけましたか?

答えて

1

次のようにしてください。

<input type="text" ng-model="vm.selectedCustomer" 
    typeahead-append-to-body="true" 
    uib-typeahead="i as vm.getFullName(i) for i in vm.lstCustomers | filter:$viewValue" /> 
+1

ありがとうございます。私の問題を解決するだけでなく、実際にはより良いモデルを生み出します。私は明らかに 'select'指示文のより良い理解を得る必要があります! – Felix

+0

あなたは暖かく歓迎しています:) – Sampath

+0

サンパス、もしあなたが気にしないなら、この構文が文書化されているところを教えてください。 Angular UI *は「sourceArrayの値のラベルとして選択」を参照していますが、実際の定義にどこに行くのかわかりません...事前に感謝しています! – Felix

関連する問題