AngularJS - изменение параметра $ Resource при изменении DLL

0

Я унаследовал Угловое приложение, которое вызывает службу веб-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 был выполнен правильно. Как это можно сделать?

Спасибо, Скотт

Теги:

2 ответа

0
Лучший ответ

Я, вероятно, не объяснил все различные части головоломки, но я попробовал решение, и для моей ситуации он не работал. Поэтому я закончил обманывать и использовал простой 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;
        }
    }

Там моя награда "Кодер года".

0

Обратите внимание на то, с чем вы пытаетесь вызвать ресурс. Посмотрите на эти документы: ресурс 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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню