预输入搜索功能

Typeahead search function

所以我正在使用作为 Angular UI 项目一部分的 typeahead 指令。我有一个调用工厂的函数(使用 $resource 调用 api)。第一个功能不起作用,但第二个功能起作用了。这里发生了什么不同?我以为这些会产生完全相同的结果,但显然我错了:

    // this didn't work, it doesn't display a list of items in typeahead, no errors.
$scope.getLocation = function(val) {
    return LocationService.search({ term: val }, function (res) {
        return res.data.map(function (item) {
            return item;
        });
    });
};

// this worked
$scope.getLocation = function(val) {
    return LocationService.search({ term: val }).$promise.then(function (res){
        return res.data.map(function (item) {
            return item;
        });
    });
};

你有 $resource 包裹在 LocationService 中吗?类似于:

function LocationService($resource) {
return {
    search : function(query){
        var locationResource = $resource('url/',
            {},
            {
                search : {
                    method: 'POST',
                    responseType : 'json'
                }
            });
        return locationResource.search({ q : query });
    }
};
}

如果是这样,在您的第一个示例中,您只是将回调作为第二个变量传递给 LocationService,这在函数定义中没有处理。 $resource 的返回函数可以将回调作为第二个参数,但如果你已经包装了它则不行。如果需要,您可以将回调传递给服务本身,例如:

function LocationService($resource) {
return {
    search : function(query, cb){
        var locationResource = $resource('url/',
            {},
            {
                search : {
                    method: 'POST',
                    responseType : 'json'
                }
            });
        return locationResource.search({ q : query }, cb);
    }
};
}