2014-09-01 156 views
-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> 

app.js:

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

回答

0

Bug修復。在我的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(); 
} 
0

爲什麼這些downvotes?錯誤很簡單:loadTags()必須返回承諾,但是您要返回$http調用的結果數據。

所以你loadTags()功能應該是:

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

你必須確保後端提供了一個數據結構是這樣的:

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

的情況下,你的後端別人提供的東西,你必須首先轉化結果;請參閱this question中的代碼瞭解如何完成此操作。如果你需要進一步的幫助,請回到我身邊。