【问题标题】:Bypass / Defer AngularJS $http.get Promise绕过/推迟 AngularJS $http.get Promise
【发布时间】:2014-04-15 02:58:51
【问题描述】:

我正在使用 ngTagsInput 来处理我的 AngularJS 项目中的标签。它有一个自动完成指令。为了处理进入指令的数据,它假设你要做:

$scope.loadTags = function(query) {
    return $http.get('tags.json');
  };

返回一个承诺。棘手的部分来了,我想做同样的事情,但我的 $scope 中已经有一个对象,其中包含我想要用于自动完成的所有标签。我不能简单地做 $scope.loadTags 因为这会返回一个错误。

无法读取未定义的属性“then”。

我如何绕过这个承诺或推迟它?

这是我的笨蛋http://plnkr.co/edit/wEqVMf?p=preview

指令: app.directive('tag', function($http) { 返回 { 限制:'E', templateUrl: 'tag.html', 链接:函数(范围,el){ scope.tags = [ {文本:'标签1'}, {文本:'标签2'}, { 文字:'标签 3' } ];

        var test = [{ text: 'Tag9' },{ text: 'Tag10' }];

        scope.loadTags = test;
    }
  }
});

<tag>内部的HTML

<tags-input ng-model="tags">
  <auto-complete ng-model="loadTags"></auto-complete>
</tags-input>
<p>Model: {{tags}}</p>

【问题讨论】:

    标签: angularjs promise


    【解决方案1】:

    使用$q.when() 从数组中创建一个已解析的承诺...

    scope.loadTags = function () {
        var test = [{ text: 'Tag9' },{ text: 'Tag10' }];
        return $q.when(test); 
    };
    

    tag.html 模板中还有一个添加错误。 ng-model="loadTags" 应该是 source="loadTags(query)"...

    <tags-input ng-model="tags">
        <auto-complete source="loadTags(query)"></auto-complete>
    </tags-input>
    

    Plunkr:http://plnkr.co/edit/fEO3MVInVe7TnFkHyCNq?p=preview

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-19
      • 2015-05-30
      • 2014-02-23
      • 2019-12-02
      • 2016-03-29
      • 1970-01-01
      相关资源
      最近更新 更多