2014-04-15 62 views
0

我正在使用ngTagsInput處理我的AngularJS項目中的標記。它有一個自動完成指令。要處理進入指令的數據,它假定您要這樣做:

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

其中返回一個承諾。這裏有棘手的部分,我想要做同樣的事情,但我已經有一個對象在我的$範圍內,有我想用於自動完成的所有標籤。我不能簡單地做$ scope.loadTags,因爲這會返回一個錯誤。

無法讀取未定義屬性'then'。

如何繞過此承諾或推遲?

這是我plunker http://plnkr.co/edit/wEqVMf?p=preview

指令: app.directive( '標籤',函數($ HTTP){ 回報{ 限制: 'E', templateUrl: 'tag.html', 鏈接:功能(範圍,EL){ scope.tags = [{ 文本: 'Tag1中'},{ 文本: '與Tag2'},{ 文本: 'TAG3'} ];

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

     scope.loadTags = test; 
    } 
    } 
}); 

HTML中使用$q.when()內的<tag>

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

回答

2

創建數組中的一個解決諾言......

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