2

Mein Bootstrap-typeahead bevölkern ist, wie folgend:Bootstrap-typeahead nicht mit Antwort von Versprechen

<input id="inputId" type="text" ng-model="selected" typeahead="name for name in getSuggestions($viewValue) " typeahead-on-select="typeaheadOnSelect($item)" ng-trim="false"> 

Die getSuggestions() ein Versprechen zurückzukehren, wie folgt vor:

$scope.getSuggestions = viewValue => { 

    let deferred = $q.defer(); 

    getSuggestions(viewValue).then(words => { 
     deferred.resolve(words); // array of strings 
    }) 
    .catch(()=>{ 
     deferred.reject([]); 
    }); 

    return deferred.promise; 

}; 

HINWEIS: die typeahead Werke in Ordnung, wenn getSuggestions() ein Array zurückgibt, ohne eine Zusage zu verwenden.

+0

'$ scope.getSuggestions' gibt ein Versprechen, nicht wahr ... so, es ist nicht ein Array gehen zurückkehren Sie mit –

+0

arbeiten können @ JaromandaX die typeahead funktioniert gut mit Versprechen.Ich kann es sagen, weil die Typahead Pop-up erscheint manchmal, wenn auch selten. – Ayan

Antwort

0

In AngularJS werden die Ergebnisse von resolve() asynchron innerhalb eines $ digest-Zyklus nicht sofort weitergegeben. Dies bedeutet, dass Callbacks, die mit then() registriert wurden, erst (später) aufgerufen werden, wenn ein Digest-Zyklus auftritt.

So rufen $ Digest() oder bei Bedarf, $ apply() ist eine Möglichkeit, einen Digest-Zyklus zu starten.

So muss der angegebene Code die aktualisiert werden folgende:

$scope.getSuggestions = viewValue => { 

    let deferred = $q.defer(); 

    getSuggestions(viewValue).then(words => { 
     deferred.resolve(words); 
     $scope.$digest();//this triggers the digest cycle 
    }) 
    .catch(()=>{ 
     deferred.reject([]); 
    }); 

    return deferred.promise; 

}; 
Verwandte Themen