AngularJS: Почему мой контроллер получает «неопределенный» из моего сервисного вызова?

0

Вопрос: Моя служба получает правильную информацию, поэтому почему мой контроллер не получает данные от моего сервиса?

Сервис: это код, который вызывает мой контроллер (и, в конечном счете, другие вещи).

// search.service.js
(function () {
    'use strict';

    angular.
        module('trips').
        factory('SearchService', SearchService);

    SearchService.$inject = ['BoatList'];

    function SearchService(BoatList) {
        var service = {
            getBoatList: getBoatList
        };

        return service;

        //////////////////////

        function getBoatList() {
            BoatList.query()
                .$promise
                .then(function (data) {
                    console.log(data);
                    return data;
                })
                .catch(function (error) {
                    return error;
                })
        }
    }
})();

Информация о консоли:

Вот почему я так смущен. Служба регистрирует Array[7] на консоли как часть .then() в вызове API. Массив содержит данные, которые я хочу. По какой-то причине я не могу получить доступ к нему в контроллере. Когда я запускаю его с помощью отладчика, я получаю 'undefined'.

Контроллер: Когда я вызываю тот же код, что и в сервисе getBoatList все работает отлично. Когда я пытаюсь получить доступ к данным возврата из activate() я не получаю никаких ошибок, просто 'undefined'.

//search.controller.js
(function () {
    'use strict';

    angular.
        module('trips').
        controller('SearchController', SearchController);

    SearchController.$inject = ['$stateParams', 'SearchService'];

    function SearchController($stateParams, SearchService) {
        var vm = this;

        vm.boatList = null;

        activate();

        ////////////////////

        function activate() {
            vm.boatList = SearchService.getBoatList();
        }
    }
})();

Recap: мое обслуживание получает правильные данные и записывает их на консоль. Мой контроллер не получает такую же информацию, позвонив в службу. Как я могу это исправить, и какое недоразумение вызывает у меня эту проблему?

  • 0
    Пожалуйста, выберите правильный ответ, если это было полезно.
Теги:

1 ответ

3
Лучший ответ

Вы должны изменить метод на своем заводе, потому что метод getBoatList должен вернуть обещание.

Измените свой заводский метод на:

function getBoatList() {
   return BoatList.query().$promise;
}

И в контроллере вы должны изменить способ activate:

function activate() {
   SearchService.getBoatList()
      .then(function (data) {
         vm.boatList = data;
      })
      .catch(function (error) {
         // do smth on error
      });
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню