AngularJS - 在DLL更改时修改$ Resource参数

时间:2015-11-25 20:47:33

标签: angularjs

我继承了一个调用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方法触发时,我需要更新" days"参数,以便正确调用Web API。如何实现这一目标?

谢谢你, 斯科特

2 个答案:

答案 0 :(得分:0)

注意你想用什么来调用资源。看看这个文档:AngularJS $resource

所以,你调用POST资源。您必须使用此参数调用资源函数:

function isValid(str) {
   return (str.match(/hello/gi) || []).length === 1;
}

所以,你的电话将是:

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

对selectedDaysValue的注释。它是来自html中summaryService.getUserSummary( {days: selectedDaysValue}, {}, function onSuccess() {} ); 的ngModel指令的模型。它必须是动态的。您始终发送21天,因为您使用静态对象select调用资源。另请注意,名称将添加到查询中,如{ Name: currentUser, days: 21 }

此外,您希望在请求中使用查询。您不需要在资源参数中指定查询。

资源定义将是:

&Name=currentUserValue

资源调用:

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

实际请求将是:myResource.get({days: 21}, function onSuccess() {});

答案 1 :(得分:0)

我可能没有解释所有拼图的各个部分,但我尝试了解决方案,而对于我的情况,它不起作用。所以我最终欺骗并使用普通的JavaScript。

在方法中,我找到了Days 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;
        }
    }

我的&#34;年度编码员&#34;奖。