2014-09-01 3 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

Ошибка исправлена. В моем коде 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, как это делается. просто вернись ко мне, если тебе нужна дальнейшая помощь в этом.

Смежные вопросы