-1

我正在使用 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>

应用程序.js:

$scope.loadTags = function(query) {
    return $http.get('getTags?query=' + query).then(function (response) {
        return response.data;
    });
}
4

2 回答 2

1

为什么要投反对票?错误很简单:loadTags()必须返回一个 Promise,但您返回的是$http调用的结果数据。

所以你的loadTags()功能应该是:

$scope.loadTags = function(query) {
    return $http.get('getTags?query=' + query);
}

您必须确保后端提供这样的数据结构:

[
    {text:'foo'},
    {text:'foo2'},
    {text:'foo3'}
]

如果您的后端提供其他内容,您必须先转换结果;请参阅此问题中的代码以了解如何完成。如果您需要进一步的帮助,请回到我身边。

于 2014-09-09T16:40:07.997 回答
0

错误已修复。在我的 HTML 代码中,函数名为“loadItems”,但在 app.js 中,函数名为“loadTags”。
完整的解决方案是:

HTML

<tags-input ng-model="myTags" display-property="Tag_Title" placeholder="Add Tag">
    <auto-complete source="loadTags($query)"></auto-complete>
</tags-input>

应用程序.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();
}
于 2014-09-13T01:18:22.513 回答