Я унаследовал Угловое приложение, которое вызывает службу веб-API. Я стараюсь сохранить существующую структуру как можно ближе к оригиналу. Новое требование - пройти через несколько дней, и я изменил вызов:
(function () {
'use strict';
angular
.module('myApp')
.factory('summaryService', ['$resource', summaryService]);
function summaryService($resource) {
return $resource('/api/summary/?days=:days', { days: '@days' }, {
getUserSummary: { method: 'POST' }
});
}
}());
Код, который вызывает службу getUserSummary, приведен ниже. У меня есть раскрывающийся список, который заполняется днями во время загрузки. Функция updateByDays - это то, что вызывается при изменении дней DDL. Это срабатывает правильно, и параметр "daysToReport" обновляется до правильного значения.
summaryService.getUserSummary({ Name: currentUser, days: 21 },
function (value) {
$scope.daysList = [{
name: '30 Days',
value: '30'
}, {
name: '60 Days',
value: '60'
}];
$scope.updateByDays = function (daysToReport) {
$scope.days = days;
...
};
},
function (httpResponse) {
...
}
);
Как и сейчас, вызов метода Web API успешно выполнен, но он всегда имеет значение параметра "дней" 21 ", которое ожидается - это жестко закодированное значение в списке параметров. Как-то, когда updateByDays Мне нужно обновить параметр "days", чтобы вызов веб-API был выполнен правильно. Как это можно сделать?
Спасибо, Скотт
Я, вероятно, не объяснил все различные части головоломки, но я попробовал решение, и для моей ситуации он не работал. Поэтому я закончил обманывать и использовал простой JavaScript.
В методе я нашел DDL дней и установил выбранную опцию соответствующее текстовое значение:
$scope.updateByDays = function (days) {
var desiredValue = days.name;
var el = document.getElementById("Days");
for (var i = 0; i < el.options.length; i++) {
if (el.options[i].text == desiredValue) {
el.selectedIndex = i;
break;
}
}
Там моя награда "Кодер года".
Обратите внимание на то, с чем вы пытаетесь вызвать ресурс. Посмотрите на эти документы: ресурс AngularJS $.
Таким образом, вы вызываете ресурс POST. Вы должны вызвать функции ресурсов с помощью этих параметров:
summaryService.getUserSummary(
{getParams},
{postParams},
function successCallback(){},
function errorCallback() {}
);
Итак, ваш звонок будет:
summaryService.getUserSummary(
{days: selectedDaysValue},
{},
function onSuccess() {}
);
Примечание к selectedDaysValue. Это модель из директивы ngModel вашего select
в html. Он должен быть динамичным. Вы отправляете 21 день все время, потому что вы вызываете ресурс со статическим объектом { Name: currentUser, days: 21 }
. Также обратите внимание, что имя будет добавлено к запросу типа &Name=currentUserValue
.
Кроме того, вы хотите использовать запрос в своем запросе. Вам не нужно указывать запрос в параметрах вашего ресурса.
Определение ресурсов будет:
return $resource('/api/summary');
Запрос ресурса:
myResource.get({days: 21}, function onSuccess() {});
Фактический запрос будет: /api/summary?days=21