我试图在[ngTagsInput][1]
项目中实施angularjs
。以下是我的设置
#js file
$scope.loadTags = function(query) {
$scope.tags = [
{ text: 'just' },
{ text: 'some' },
{ text: 'cool' },
{ text: 'tags' }
]
//return $http.get('/tags?query=' + query);
}
在我看来(myview.html.haml)
%tags-input{"ng-model" => "tags"}
%auto-complete{:source => "loadTags($query)"}
与
相同 <tags-input ng-model="tags">
<auto-complete source="loadTags($query)"></auto-complete>
</tags-input>
**以上代码我是从ngTagInput插件网站本身复制的。我使用CDN加载与插件网站相同的版本。但是当我输入标签时,我的javascript控制台中出现以下错误
TypeError: Cannot read property 'then' of undefined
at http://cdnjs.cloudflare.com/ajax/libs/ng-tags-input/2.0.1/ng-tags-input.min.js:1:5150
at http://ajax.googleapis.com/ajax/libs/angularjs/1.2.15/angular.js:13777:28
at completeOutstandingRequest (http://ajax.googleapis.com/ajax/libs/angularjs/1.2.15/angular.js:4236:10)
at http://ajax.googleapis.com/ajax/libs/angularjs/1.2.15/angular.js:4537:7
它似乎与承诺有关。 (我对angularjs
很新,我只是在猜测),但我想知道它在website
但是如果我用页面加载加载标签,它可以正常工作。这里可能出现什么问题。任何帮助将不胜感激
in controller
调用此标记自动填充方法(directive
)。 (对不起...... :() recipeform.tags
是我的模特
#haml form
%tags-input{"ng-model" => "recipeform.tags"}
%auto-complete{:source => "loadTags($query)"}
#js
$scope.loadTags = function(query) {
var defer = $q.defer();
defer.resolve([
{ text: 'just' },
{ text: 'some' },
{ text: 'cool' },
{ text: 'tags' }
]);
return defer.promise;
/*return [*/
//{ text: 'just' },
//{ text: 'some' },
//{ text: 'cool' },
//{ text: 'tags' }
/*]*/
}
两个js代码都给出了与之前相同的错误:(
答案 0 :(得分:3)
<auto-complete source="loadTags($query)"></auto-complete>
“source”是一个应该返回promise的方法,它将用于返回标记。不要将它们注入你的模型......
$scope.loadTags = function(query) {
return[
{ text: 'just' },
{ text: 'some' },
{ text: 'cool' },
{ text: 'tags' }
]
}
应该有效。如果没有,这意味着该指令需要一个真正的承诺,那么你需要做(但我认为你不需要走这么远):
$scope.loadTags = function(query) {
var defer = $q.defer();
defer.resolve([
{ text: 'just' },
{ text: 'some' },
{ text: 'cool' },
{ text: 'tags' }
]);
return defer.promise;
}