2013-04-15 15 views
14

Próbuję skonfigurować typeahead użyciu AngularJS & UI Bootstrap tak:wpisywanie znaków z wyprzedzeniem za pomocą nazwy obiektu

.html

<input type="text" ng-model="selectedStuff" typeahead="stuff.name for stuff in stuffs | filter:$viewValue"/> 

<span>{{selectedStuff.name}}</span> 
<span>{{selectedStuff.desc}}</span> 

js

$scope.stuffs= [ 
       { 
       "name":"thing1", 
       "desc":"this is the first thing" 
       }, 
       { 
       "name":"thing2", 
       "desc":"this is the second thing" 
       } 
       ] 

Obecnie byłem jestem w stanie zaktualizować model o wybraną nazwę, ale moim celem jest przekazanie całego obiektu przez typeahead. Czy jest to czysty sposób, aby to zrobić za pomocą tylko wejście?

Odpowiedz

26

Jasne :-)

Dyrektywa wpisywanie znaków z wyprzedzeniem od http://angular-ui.github.io/bootstrap/ używa tego samego super elastyczną składnię jako angularjs select directive dla ng-options. Więc można napisać:

typeahead="stuff as stuff.name for stuff in stuffs | filter:$viewValue" 

Oto upadać pracy: http://plnkr.co/edit/5kGZkNPZ7rIFfb4Rvxej?p=preview

+3

Amazing! Równie proste i niesamowite, jak miałem nadzieję. Dziękuję Ci! – Jesse

+1

W polu wejściowym widzę "[Obiekt obiektu]", ponieważ muszę go utworzyć w kontrolerze, aby użyć go w kontrolerze. Jeśli nie utworzę tego, a na początku jest nieokreślona, ​​to wyświetla się dobrze. To jest moje kłopotliwe położenie. Jakieś pomysły? – morgs32

+0

Mam ten sam błąd. Obiekt obiektu pojawia się po kliknięciu, morgs32 udało Ci się to naprawić? –

0

miałem ten sam problem. Rozwiązałem go przez:

typeahead="country.name for country in countryList | filter:$viewValue | limitTo:8" 

tutaj countryList jest listą obiektu kraju. nazwa jest jedną z właściwości obiektu krajowego. Dla mnie działa dobrze.

Powiązane problemy