angularjs – 使用ngTagsInput自动完成无法读取未定义的属性’then’

前端之家收集整理的这篇文章主要介绍了angularjs – 使用ngTagsInput自动完成无法读取未定义的属性’then’前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我想弄清楚这个问题,但我没有运气.

这是我写的有效的掠夺者.请注意,当我使用$http.get访问tags.json时,代码可以正常工作.

角度指令代码

  1. app.directive('tag',function($http) {
  2. return {
  3. restrict: 'E',templateUrl: 'tag.html',link: function (scope,el) {
  4. scope.tags = [
  5. { text: 'Tag1' },{ text: 'Tag2' },{ text: 'Tag3' }
  6. ];
  7.  
  8. var test = [{ "text": "Tag9" },{ "text": "Tag10" }];
  9.  
  10. scope.loadTags = function (query) {
  11. return $http.get('tags.json');
  12. }
  13. }
  14. }
  15. });

‘tag.html’中的HTML:

  1. <tags-input ng-model="tags">
  2. <auto-complete source="loadTags($query)"></auto-complete>
  3. </tags-input>
  4. <p>Model: {{tags}}</p>

工作图:

很好,但是,我不想使用$http.get,因为我已经有一个对象,里面有我想要用于自动完成的标签.所以我尝试了这个

角度指令代码

  1. app.directive('tag',{ "text": "Tag10" }];
  2. scope.loadTags = test;
  3. }
  4. }
  5. });

我的’tag.html’中的HTML:

  1. <tags-input ng-model="tags">
  2. <auto-complete ng-model="loadTags"></auto-complete>
  3. </tags-input>
  4. <p>Model: {{tags}}</p>

但这根本不起作用.相反,我得到了

  1. TypeError: Cannot read property 'then' of undefined
  2. at http://cdnjs.cloudflare.com/ajax/libs/ng-tags-input/2.0.0/ng-tags-input.min.js:1:5044
  3. at http://code.angularjs.org/1.2.15/angular.js:13777:28
  4. at completeOutstandingRequest (http://code.angularjs.org/1.2.15/angular.js:4236:10)
  5. at http://code.angularjs.org/1.2.15/angular.js:4537:7 angular.js:9563

链接到我的Plunk:
http://plnkr.co/edit/wEqVMf?p=info

所以需要更改loadFunction以便它返回一个promise:
  1. app.directive('tag',function($q) {
  2. ...
  3. link: function(scope) {
  4. $scope.loadTags = function() {
  5. var deferred = $q.defer();
  6. deferred.resolve([{ text: 'Tag9' },{ text: 'Tag10' }]);
  7. return deferred.promise;
  8. }
  9. }
  10. }

除此之外,您需要修复标记,以便它使用source选项:

  1. <auto-complete source="loadTags()"></auto-complete>

解决了我的问题

猜你在找的Angularjs相关文章