AngularJS: заводская функция не определена в контроллере

Раньше я заставлял его работать точно так же, и это сводило меня с ума. Я хочу выполнить вызов $ http GET в фабрику, а затем вернуть результат в контроллер для обработки.

factory (не обращайте внимания на безумие URL запроса):

App.factory('MessageFactory', function ($http) {
        var MessageFactory = {
            getCast: function () {
                var request = {
                    method: "GET",
                    url: spHostUrl + "/_api/web/Lists/getByTitle('" + listTitle + "')/items?$select=AuthorId,Author/Name,Author/Title,Type_x0020_message,Title,Modified,Body,Expires,Attachments&$expand=Author/Id",
                    headers: {
                        "Content-Type": "application/json;odata=verbose",
                        "Accept": "application/json;odata=verbose"
                    }
                };

                $http(request)
                .then(function (res) {
                    return res.data;
                }).catch(function (res) {
                    console.error("error ", res.status, res.data);
                }).finally(function () {
                    console.log("end");
                });
            }
        };
        return MessageFactory;
    });

Теперь контроллер:

App.controller('MessageController', function ($scope, $http, $log, $attrs, MessageFactory) {
        $scope.messages = MessageFactory;
        MessageFactory.getCast().then(function (asyncCastData) {
            $scope.messages.cast = asyncCastData;
        });
        $scope.$watch('messages.cast', function (cast) {
            //do stuff
        });
});

Когда я тестирую это, я получаю следующую ошибку:

Ошибка: MessageFactory.getCast (...) не определено @ / Scripts / App.js: 167: 9

Строка 167 действительно является этой строкой в ​​контроллере.

MessageFactory.getCast().then(function (asyncCastData) {

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


comment
у вас должно быть .then неопределенной ошибки .. Верно?   -  person Pankaj Parkar    schedule 11.06.2015


Ответы (1)


Вы должны получить .then of undefined error

Потому что вы пропустили возврат обещания из метода обслуживания.

Сервис

var MessageFactory = {
  getCast: function() {
    var request = {
      method: "GET",
      url: spHostUrl + "/_api/web/Lists/getByTitle('" + listTitle + "')/items?$select=AuthorId,Author/Name,Author/Title,Type_x0020_message,Title,Modified,Body,Expires,Attachments&$expand=Author/Id",
      headers: {
        "Content-Type": "application/json;odata=verbose",
        "Accept": "application/json;odata=verbose"
      }
    };

    return $http(request) //returned promise from here
      .then(function(res) {
        return res.data;
      }).catch(function(res) {
        console.error("error ", res.status, res.data);
      }).finally(function() {
        console.log("end");
      });
    }
};
person Pankaj Parkar    schedule 11.06.2015
comment
Большое спасибо Я подумал, что возврата данных, полученных в разделе then, было бы достаточно! - person Alex; 11.06.2015
comment
@Alex Это здорово .. Рад помочь вам .. Спасибо :) - person Pankaj Parkar; 11.06.2015