1

我正在尝试将 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;
  });
};

普朗克

4

1 回答 1

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

更新的 Plunker

这会起作用,但它没有多大意义,因为它发出一个请求然后丢弃它的响应。如果您不需要处理响应,您可以直接返回 http 承诺(假设响应结构对指令有效):

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

最后,successerror方法都已弃用。您应该始终使用then

于 2016-07-27T23:41:13.057 回答