我正在尝试使用自动填充的ngTagInput,但会出现以下错误:
angular.min.js:117 TypeError: a.filter is not a function
at d (ng-tags-input.min.js:1)
at ng-tags-input.min.js:1
at angular.min.js:130
at n.$eval (angular.min.js:144)
at n.$digest (angular.min.js:142)
at n.$apply (angular.min.js:145)
at l (angular.min.js:97)
at H (angular.min.js:101)
at XMLHttpRequest.u.onload (angular.min.js:102)
HTML
<tags-input ng-model="selectedList">
<auto-complete source="getData($query)"></auto-complete>
</tags-input>
的Javascript
$scope.getData = function(query) {
var request = {
// GET request is defined here
};
return $http(request).success(function(response, status) {
var defer = $q.defer();
defer.resolve([
{ 'text': 'just' },
{ 'text': 'some' },
{ 'text': 'cool' },
{ 'text': 'tags' }
]);
return defer.promise;
});
};
答案 0 :(得分:1)
您正在使用不可链接的success
方法,即它忽略了返回值,因此getData
函数实际上直接返回$http
个承诺,根据你的Plunker,它恰好解析为一个未确定的值,因此filter is not a function
错误,因为autoComplete
指令需要一个数组。
您应该使用then
而不是success
(您也不需要创建新的承诺以便从另一个承诺中返回值):
$scope.getData = function(query) {
...
return $http(request).then(function(response, status) {
return [
{ 'text': 'just' },
{ 'text': 'some' },
{ 'text': 'cool' },
{ 'text': 'tags' }
];
});
}
这样可行,但它没有多大意义,因为它发出请求然后丢弃其响应。如果您不需要处理响应,则可以直接返回http promise(假设响应结构对指令有效):
$scope.getData = function(query) {
...
return $http(request);
};
最后,success
和error
方法have been deprecated。您应该始终使用then
。