Ui.Bootstrap Typeahead不能使用异步调用

时间:2015-04-11 10:13:02

标签: angularjs node.js sails.js angular-bootstrap angular-ui-typeahead

我正在使用带有异步调用的ui.bootstrap typeahead。但是,结果数据似乎没有找到回到typeahead指令的方法,随后没有数据显示下拉列表。

html是

<input type="text" ng-model="asyncSelected" placeholder="Search Profile" typeahead="username.username for username in getSearch($viewValue)" typeahead-wait-ms="400" class="form-control">

JS功能就在这里

$scope.getSearch = function (val) {

    return $sails.get("/search/" + val).success(function (response) {
        console.log(response);
        return response.map(function (item) {
            console.log(item.username);
            return item.username;
        });

    }).error(function (response) {
        console.log('The sails profile search has failed');
    });

}

响应JSON对象是

Object
@type: "d"
id: "#17:3"
username: "Burt"
__proto__: Object

我在客户端上使用angular-sails来查询后端。我已经使用ui.bootstrap文档中给出的示例测试了代码,一切正常。

$ sails.get也可以作为console.log(item.username)打印出值。

我觉得它与getSearch函数中的promise有关。

为什么下拉列表没有出现的任何想法?

1 个答案:

答案 0 :(得分:0)

我将风帆从10.5更新到11.随后客户端SDK发生了变化(Sails.io),我使用Angular-Sails的角度库也需要更新。

承诺功能已更改,我需要更新它。将promise函数更改为下面的函数可以解决问题。现在,typeahead函数获得响应并显示下拉列表。

    return $sails.get("/search/" + val)
        .then(function (response) {
            console.log(response);
            return response.data.map(function (item) {
                return item.username;
            });
        }, function (response) {
            alert('Houston, we got a problem!');
        });