2013-04-16 12 views
20

Ho il seguente AngularUI-Bootstraptypeahead grande lavoro:limite angolare UI-Bootstrap typeahead a specifiche proprietà dell'oggetto

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

però, è quasi lavorando troppo grande. Sono in grado di visualizzare stuffs.name per gli scopi di typeahead E selezionare l'intero oggetto stuff in stuffs. Il problema è che il mio $viewValue corrisponde a tutte le proprietà in stuff anziché solo allo stuff.name. Ho provato ad aggiungere lo .name a vari posti nello typeahead senza fortuna. C'è un modo semplice per visualizzare e abbinare solo lo .name ma restituire ancora l'intero oggetto?

risposta

38

La direttiva typeahead dal repository http://angular-ui.github.io/bootstrap/ è stata creata per adattarsi perfettamente all'ecosistema AngularJS esistente. Ciò significa che questa direttiva tenta di riutilizzare il più possibile la sintassi, i filtri e le direttive già utilizzate in AngularJS.

Torna alla tua domanda - il filtraggio si è fatto da filtro filtro del angolare qui descritto: http://docs.angularjs.org/api/ng.filter:filter sintassi del filtro citato è sufficientemente flessibile per limitare le ricerche a un insieme selezionato di proprietà:

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

Si prega di notare: filter:{name: $viewValue}

lavoro Plunk qui: http://plnkr.co/edit/o1qWKq8LSmbbmVaYkOvb?p=preview

+0

Grazie mille! Giuro che ho provato a RTFM, ma suppongo che avrò un punto da tenere. – Jesse

+0

Non vedo la differenza che 'filter: {name: $ viewValue}' Ho provato a cambiarlo in 'filter: $ viewValue' e l'output era lo stesso. –

+0

@SaadFarooq Quando si modifica la sintassi t 'filter: $ viewValue', angular fondamentalmente crea una stringa JSON fuori dall'oggetto e la ricerca. La sintassi pkozlowski ha utilizzato SOLO le ricerche sul campo del nome. Prova usando la parola "secondo" sul Plnkr sopra. Non appare dove nei campi del nome. Se lo modifichi come hai suggerito, "secondo" mostrerebbe il secondo risultato. – jklemmack

Problemi correlati