вот часть кода, с которой я борюсь - у меня есть контроллер (zmApp.MonitorCtrl), который вызывает фабрику (ZMFactory) с HTTP-запросом.Обработка обещаний AngularJS с http
Проблема я столкнулся это: а) Когда контроллер вызывает ZMFactory.getMonitors() возвращает неопределенное значение, и я получаю сообщение об ошибке ОШИБКА: Ошибка: не определено не является объектом (оценка «ZMFactory.getMonitors() .then ')
б) После того, как эта ошибка возникает, запрос HTTP на заводе перерабатывается
Я немного запутался. Можете ли вы проверить, правильно ли настроен завод, чтобы вернуть обещание?
var app = angular.module('zmApp.controllers');
app.controller('zmApp.MonitorCtrl', function($ionicPlatform, $scope,$http,ZMFactory)
{
$scope.monitors=[];
console.log("***CALLING FACTORY");
ZMFactory.getMonitors().then(function(data)
{
$scope.monitors = data;
console.log ("I GOT " +$scope.monitors);
});
});
app.factory('ZMFactory',['$http', '$rootScope',function($http,$rootScope)
{
//var factory = {};
var monitors =[];
return {
getMonitors: function()
{
console.log("***MAKING REQUEST");
$http({
url:'http://myurl.com:9999/zm/index.php?skin=xml',
method:'post',
headers: {'Content-Type': 'application/x-www-form-urlencoded',
'Accept': '*/*',
},
transformRequest: function(obj) {
var str = [];
for(var p in obj)
str.push(encodeURIComponent(p) + "=" + encodeURIComponent(obj[p]));
var foo= str.join("&");
console.log ("****RETURNING "+foo);
return foo;
},
transformResponse: function(data)
{
var x2js = new X2JS();
var json = x2js.xml_str2json(data);
console.log ("***Transmogrifying XML to JSON");
return json;
},
data: {username:'xxx',
password:'xxxx',
action:'login',
view:'console'}
}) //http
.success (function(data)
{
console.log("****YAY"+JSON.stringify(data));
var subobj =data.ZM_XML.MONITOR_LIST.MONITOR;
var len = subobj.length;
for (var i =0; i< len; i++)
{
console.log ("HERE " + subobj[i].NAME);
monitors.push(subobj[i]);
}
// $rootScope.$broadcast ('handleZoneMinderMonitorsUpdate',monitors);
return monitors;
}) //success
.error(function(data, status, headers, config)
{
console.log("***OOPS "+status + " H: "+data);
return monitors;
});
} //getMonitors
};//return
console.log ("**** NEVER *****");
}]);
вам нужен массив зависимостей для контроллера? – Plato
Привет, Платон, я не уверен, но я так не думаю - завод может быть вызван с контроллера. – user1361529
ах, я вижу, да функция getModules не возвращает обещание. извините, я не знаю, как построить обещание. – Plato