错误:未定义承诺

时间:2014-09-01 14:11:32

标签: javascript angularjs angular-promise ng-tags-input

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

2 个答案:

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