我正在使用angularjs来创建标签列表输入 当我在标签列表控件中键入3个以上的字符时,浏览器控制台中会显示以下错误。
AngularJS v1.2.23
ngTagsInput v2.1.0
Error: promise is undefined
SuggestionList/self.load/debouncedLoadId
HTML:
<tags-input ng-model="tags" display-property="Tag_Title" placeholder="Add Tag">
<auto-complete source="loadItems($query)"></auto-complete>
</tags-input>
app.js:
$scope.loadTags = function(query) {
return $http.get('getTags?query=' + query).then(function (response) {
return response.data;
});
}
答案 0 :(得分:0)
为什么那些贬值?错误很简单:loadTags()
必须返回一个承诺,但您要返回$http
调用的结果数据。
所以你的loadTags()
函数应该是:
$scope.loadTags = function(query) {
return $http.get('getTags?query=' + query);
}
您必须确保后端提供如下数据结构:
[
{text:'foo'},
{text:'foo2'},
{text:'foo3'}
]
如果您的后端提供其他内容,您必须先转换结果;请参阅this question中的代码,了解其完成情况。如果您需要进一步的帮助,请回复我。
答案 1 :(得分:0)
错误修复了。在我的HTML代码中,函数名称为&#34; loadItems&#34;但在app.js中,该函数被命名为#34; loadTags&#34;。
完整的解决方案是:
<强> HTML 强>
<tags-input ng-model="myTags" display-property="Tag_Title" placeholder="Add Tag">
<auto-complete source="loadTags($query)"></auto-complete>
</tags-input>
<强> app.js 强>
$scope.myTags = [];
$scope.loadTags = function(query) {
return $http.get('getTags?query=' + query)
.then(function (response) {
return response.data;
});
}
<强> PHP 强>
对于服务器端,我使用了Laravel框架
public function getTags()
{
$query = Input::get('query');
return Tag::where('Tag_Title', 'LIKE', $query.'%')->get();
}