所以我正在使用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);
}
};
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句