错误:promise未定义

Error: promise is undefined

本文关键字:未定义 promise 错误      更新时间:2023-09-26

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

为什么会投这些反对票?错误很简单:loadTags()必须返回promise,但您将返回$http调用的结果数据。

所以你的loadTags()函数应该是:

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

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

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

如果您的后端提供了其他内容,则必须首先转换结果;请参阅此问题中的代码,了解如何做到这一点。如果你需要进一步的帮助,请回来找我。

错误已修复。在我的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>

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();
}