绕过/推迟AngularJS $ http.get Promise

时间:2014-04-15 02:58:52

标签: angularjs promise

我正在使用ngTagsInput来处理我的AngularJS项目中的标签。它有一个自动完成指令。要处理进入指令的数据,它假定您要执行:

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

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

  

无法读取属性'然后'未定义。

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

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

指令:     app.directive(' tag',function($ http){       返回{         限制:' E',         templateUrl:' tag.html',         link:function(scope,el){            scope.tags = [               {text:' Tag1' },               {text:' Tag2' },               {text:' Tag3' }             ];

        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>

1 个答案:

答案 0 :(得分:2)

使用$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