2014-12-06 12 views
5

Ho un Typeahead AngularJS che recupera le corrispondenze in modo asincrono. Quando un codice a barre viene scansionato nel campo, restituisce il risultato corrispondente, ma l'utente deve ancora selezionarlo. Vorrei selezionare automaticamente il risultato se è una corrispondenza esatta. Vedo che il typeahead ha una funzione select (idx), ma non sono sicuro di come ottenere un riferimento dal mio controller.Scelta a livello di codice Selezionare AngularJS Typeahead

stavo immaginando qualcosa di simile:

$scope.SearchItems = function (term) { 
    return $http.get('api/Items/Search', { 
     params: { 
      term: term 
     } 
    }).then(function (response) { 
     if (response.data.length == 1 && response.data[0].Code == term) { 
      // Somehow inform typeahead control to select response.data[0] 
     } 
     return response.data; 
    }); 
}; 
+0

Potrebbe aggiungere un console.log (risposta) e farmi sapere cosa restituisce? – Nicolas2bert

+0

{ config: {...}, dati: [{codice = "ABC", OtherProperties = Valori}], di stato: 200, statusText: "OK" } –

risposta

0

ho avuto un problema simile e mai capito come accedere della typeahead select(idx), ma sono riuscito a ottenere questa funzionalità di lavoro. Ecco la mia soluzione hacky ....

$promise.then(function(res) { 
angular.forEach(res, function(item, key) { 

    // if we have an exact match 
    if (item.title === term) { 
     // update model 
     $scope.src = item; 

     // find item in dropdown 
     var elm = '[id*=option-' + key + ']'; 
     var opt = angular.element(document.querySelectorAll(elm)); 

     //call click handler outside of digest loop 
     $timeout(function() { 
      opt.triggerHandler('click'); 
     }, 0); 
    } 
}); 
// return async results 
return res; 
}); 

In fondo siamo solo aggiornare il nostro modello manualmente, individuare l'elemento nella nostra discesa e poi sparare il 'click' handler. Accertati di avvolgere la chiamataCin un valore $timeout() impostato su zero, altrimenti otterrai un errore $rootScope:inprog poiché digest è già in corso.

+0

Questo funziona se v'è una sola typeahead nella pagina, corretto? Se si dispone di più, tenterà di selezionare quell'indice su ogni typeahead. –

+0

Sì, questo è corretto, ma da quello che ho capito, le opzioni typeahead sono visibili solo se si usa typeahead .... quindi se avessi più typeaheads, selezionerebbe solo l'opzione visible. – accraze

+0

Hai ragione. Funziona alla grande, grazie! –

Problemi correlati