2015-11-25 51 views
0

我繼承了一個調用Web API服務的Angular應用程序。我試圖保持現有結構儘可能接近原始結構。一個新的要求是通過幾天,並且我修改了呼叫:

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

還有我的「年度編碼器」獎。

0

收費關注你在嘗試撥打資源的方式。看看這篇文檔:AngularJS $resource

所以,你調用POST資源。你必須調用資源函數與此PARAMS:

summaryService.getUserSummary(
    {getParams}, 
    {postParams}, 
    function successCallback(){}, 
    function errorCallback() {} 
); 

所以,您的通話將被:

summaryService.getUserSummary(
    {days: selectedDaysValue}, 
    {}, 
    function onSuccess() {} 
); 

注到selectedDaysValue。它是來自你的select的ngModel指令的模型。它必須是動態的。您始終發送21天,因爲您使用靜態對象{ Name: currentUser, days: 21 }撥打資源。另外,請注意名稱將被添加到像&Name=currentUserValue這樣的查詢中。

另外,您想在請求中使用查詢。您不需要在資源參數中指定查詢。

資源定義爲:

return $resource('/api/summary'); 

資源調用:

myResource.get({days: 21}, function onSuccess() {}); 

實際的請求是:/api/summary?days=21