Раньше я заставлял его работать точно так же, и это сводило меня с ума. Я хочу выполнить вызов $ 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) {
Мое приложение отлично работает с любой другой функцией, поэтому моя проблема возникла при добавлении этой части, и я почти уверен, что мой контроллер еще не знает мою фабрику и поэтому пытается получить доступ к его функции. Поскольку это асинхронный вызов, он должен работать с кодом в контроллере. Мне нужна твоя помощь в этом, спасибо.
.then
неопределенной ошибки .. Верно? - person Pankaj Parkar   schedule 11.06.2015