Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 引导typeahead未填充来自promise的响应_Javascript_Twitter Bootstrap_Promise_Typeahead_Bootstrap Typeahead - Fatal编程技术网

Javascript 引导typeahead未填充来自promise的响应

Javascript 引导typeahead未填充来自promise的响应,javascript,twitter-bootstrap,promise,typeahead,bootstrap-typeahead,Javascript,Twitter Bootstrap,Promise,Typeahead,Bootstrap Typeahead,我的引导类型如下所示: <input id="inputId" type="text" ng-model="selected" typeahead="name for name in getSuggestions($viewValue) " typeahead-on-select="typeaheadOnSelect($item)" ng-trim="false"> $scope.getSuggestions = viewValue => { let deferre

我的引导类型如下所示:

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

    let deferred = $q.defer();

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

    return deferred.promise;

};
$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;

};

注意:当getSuggestions()返回数组而不使用任何承诺时,typeahead可以正常工作。

在AngularJS中,resolve()的结果在$digest循环内异步传播,而不是立即传播。这意味着只有在(稍后)发生摘要循环时才会调用使用then()注册的回调

因此,调用$digest()或者如果需要,$apply()是运行摘要循环的一种方法

因此,需要将给定代码更新为以下内容:

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

    let deferred = $q.defer();

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

    return deferred.promise;

};
$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;

};

$scope.getSuggestions
返回承诺,对不对。。。所以,它不会返回一个你可以使用的数组with@JaromandaXtypeahead可以很好地实现承诺。我可以这么说,因为typeahead弹出窗口有时会出现,但很少出现。