预输入搜索功能
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);
}
};
}
所以我正在使用作为 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);
}
};
}