使用ngTagInput时出错:TypeError:a.filter不是函数

时间:2016-07-26 23:38:26

标签: ng-tags-input

我正在尝试使用自动填充的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;
  });
};

Plunker

1 个答案:

答案 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' }
   ];
  });
}

Updated Plunker

这样可行,但它没有多大意义,因为它发出请求然后丢弃其响应。如果您不需要处理响应,则可以直接返回http promise(假设响应结构对指令有效):

$scope.getData = function(query) { 
  ...
  return $http(request);
};

最后,successerror方法have been deprecated。您应该始终使用then