Как заполнить Angular UI Bootstrap Typeahead новейшим ресурсом $

Согласно этому ответу Павла Козловского, Typeahead из AngularUI-Bootstrap должен работать при асинхронном получении всплывающих элементов с $ resource в новейших версиях Angular (Я использую 1.2.X).

http://plnkr.co/edit/t1neIS?p=info

Думаю, я не знаю, как его правильно использовать (в результате я получаю ошибку в коде директивы typeaheadHighlight - typeahead обрабатывает мгновенно возвращенные Resources как строки и шины для их выделения).

Plunk - напечатайте вперед с $ resource

Я думаю, что критический код:

$scope.cities = function(prefix) {
    var p = dataProviderService.lookup({q: prefix}).$promise;
    return p.then(function(response){
        $log.info('Got it!');
        return response.data;
    });
    return p;
};

Я пробовал кучу вещей - возвращал $promise (версия от Plunker), query(), then().
В настоящее время я использую $http для этой функции в своем приложении, и меня это устраивает. Тем не менее, просто хотел узнать, как добиться того же с $resource.

Возможно, вы захотите взглянуть на это: https://github.com/angular/angular.js/commit/05772e15fbecfdc63d4977e2e8839d8b95d6a92d
ui.bootstrap.typeahead совместим ли ui.bootstrap.typeahead с этими изменениями в API обещаний $ resource?


person vucalur    schedule 24.11.2013    source источник


Ответы (5)


Должно быть:

$scope.cities = function(prefix) {
    return dataProviderService.lookup({q: prefix}).$promise.then(
      function(response){
        // might want to store them somewhere to process after selection..
        // $scope.cities = response.data;
        return response.data;
    });
};

Это основано на упомянутой выше фиксации angular, и у меня это сработало на Angular 1.2.13.

person Andrew Lank    schedule 19.02.2014
comment
Как я уже сказал, я уже пробовал это :) вот и все: plnkr.co/edit/lr7unp6b0XclWGTzgCyh. Обновленные библиотеки, все еще не работающие. Если у вас все правильно, предоставьте рабочий стол - person vucalur; 03.03.2014
comment
Выдает Cannot read property 'length' of undefined ошибку - person Shardul; 06.08.2015

Благодаря ответу @andrew-lank я тоже сделал свой с $ resource. Однако в моем ответе не было атрибута данных. Я использовал метод запроса для $ resource, который ожидает тип ответа массива, так что, возможно, именно поэтому нет атрибута данных. Это массив объектов ресурса, каждый из которых содержит данные. Итак, мой код немного проще, выглядит примерно так:

$scope.cities = function(prefix) {
    return dataProviderService.query({q: prefix}).$promise.then(
      function(response){
        return response;
    });
};
person Tony Z    schedule 26.02.2014
comment
Возможно, это могло сработать еще в феврале 2014 года, но это не работает с текущими версиями angular. - person JustMaier; 28.05.2015

Я столкнулся с той же проблемой, и я ударился головой о стену. Проблема связана со службой данных, поскольку она возвращает массив строк вместо того, чтобы заключать их в объект JSON. $ resource не будет работать с массивом строк.

Для получения дополнительной информации ознакомьтесь с этим ответом: Одномерный массив строк, анализируемых в 2d ресурсом angular

person Private Winger    schedule 03.03.2014

typeahead = "i.t_UserName для i в employeeInfo | filter: $ viewValue | limitTo: 4"
как атрибут вашего ввода html

и в вашем контроллере (используя ресурс сотрудника)

$ scope.employeeInfo = getEmployeeResourceSvc.getEmplInfo.query (функция (ответ) {$ scope.employeeInfo = response;});

person Siva Raparla    schedule 10.03.2014

В ui-bootstrap 13.0 и angular 1.3 теперь вы можете делать следующее:

$scope.cities = function (q) {
    return $scope.resource.query({ q: prefix }).$promise
}
person JustMaier    schedule 28.05.2015