2015-11-25 2 views
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, мне нужно обновить параметр «дней», поэтому обращение к Web API сделано правильно. Как это можно сделать?

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

ответ

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; 
     } 
    } 

Там идет мой «Coder года» награду.

0

Pay внимание на то, что вы пытаетесь вызвать ресурс. Посмотрите на это документы: AngularJS $resource.

Итак, вы вызываете ресурс POST. Вы должны вызывать функции ресурса с этим Params:

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

Смежные вопросы