вот моя проблема:
У меня есть служба, созданная с $ resource и контроллером; контроллер вызывает службу, и я пытаюсь установить значение после ответа (на самом деле ошибка). Проблема в том, что я пытаюсь установить это значение вне обратного вызова. Вот этот сервис:
app.factory("DataService", function ($resource, ENV) {
return $resource(ENV.apiEndpoint + "/endpoint/:id", {id:'@id'}, {
update: { method: 'PUT' }
});
});
Это простой сервис, который извлекает данные из бэкэнд через конечную точку REST.
Вот контроллер:
app.controller("DataController", function (DataService){
var ctrl = this;
ctrl.initialData = undefined;
ctrl.data = undefined;
ctrl.initData = function() {
ctrl.getData();
ctrl.data = ctrl.initialData;
};
ctrl.getData = function() {
DataService.get({},
function (response) {
ctrl.initialData = response.content;
}, function (error) {
ctrl.initialData = { data1: "A" };
});
};
});
Angular $resource Doc говорит вызов метода Get() таким образом:
Методы действия на объект класса или объект экземпляра может быть требо следующие параметры:
HTTP GET "class" actions: Resource.action([parameters], [success], [error])
Поскольку мой бэкэнд еще не реализован, при отладке я правильно просматриваю функцию обратного вызова ошибки. Но я вижу, что моя переменная данных по-прежнему не определена.
Моя проблема в том, что я по-прежнему не очень-то привык к обещаниям. Я понимаю, что ответ от DataService является асинхронным. Поэтому я попытался установить данные несколькими способами без успеха. Я пробовал:
Для замены метода initData с:
Но я никогда не войти в 'поймать' состояние;
Чтобы использовать $ Q услуги:
ctrl.initData = function() { $q.all([ctrl.getData()]).then(function() { ctrl.data = ctrl.initialData; }); };
Чтобы использовать
$q.when
создать обещание от переменнойctrl.data
:ctrl.billingInfo = $q.when(/*???*/);
Другие варианты тех ..
Я мог бы заставить его работать, установив data
непосредственно в функции обратного вызова, но тогда это означает, что я сбросить данные каждый раз, когда я называю метод getData()
, и это то, что я хочу, чтобы избежать для наилучшей практики назначения:
ctrl.getData = function() {
DataService.get({},
function (response) {
ctrl.initialData = response.content;
ctrl.data = ctrl.initialData;
}, function (error) {
ctrl.initialData = { data1: "A" };
ctrl.data = ctrl.initialData;
});
};
Есть ли способ, чтобы ждать, что ctrl.initialData
был установлен до установки ctrl.data
?
Любая небольшая помощь очень ценится
ваш 'GetData 'теперь ничего не возвращаю, поэтому вы можете использовать его с' $ q' и т. д., а также ресурсы в угловом имеют свойство '$ prom', что вы можете использовать – Grundy
вам нужно t o передавать аргумент, такой как res или data, хотя ваши обещания - это представление возвращаемого значения предыдущего оператора –