使用$ resource设置路径参数而不影响有效负载

时间:2016-01-22 09:50:54

标签: angularjs angular-resource

首先,我想提一下,为此,我一直在挖掘很多东西。即使在docs中,我也无法找到简单直接的答案。 (如果你愿意,请叫我笨,如果在文档中提到它!我似乎无法找到它。)

问题是,我想对表格

的网址发出PUT请求
app.constant('URL_REL_VENDOR_PRODUCTS', '/api/vendor/:vendorId/products/:productId');

但我不想将vendorId参数放在请求有效负载中。我的服务层看起来像这样:

services.factory('VendorProductService', function($resource, UserAccountService, URL_BASE, URL_REL_VENDOR_PRODUCTS) {
    return $resource(URL_BASE + URL_REL_VENDOR_PRODUCTS, {
        vendorId: UserAccountService.getUser().vendorId,
        id: '@id'
    }, {
        update: { method: 'PUT' }
    });
});

我知道vendorId: UserAccountService.getUser().vendorId而不是vendorId: '@vendorId'我可以写一些UserAccountService.getUser()的内容,但那会污染我的有效负载吗?

我不想保留我已在示例中使用的机制,因为当您切换帐户时机制不起作用,即vendorId已更新。基本上我不得不重新加载整个页面以重新初始化服务。

简而言之,问题是,如标题所示,如何在不使用代码段中的服务而不修改有效负载的情况下设置路径参数$('[class^="class_"]').each(function() {});

1 个答案:

答案 0 :(得分:1)

使参数值成为函数:

services.factory('VendorProductService', function($resource, UserAccountService, URL_BASE, URL_REL_VENDOR_PRODUCTS) {
    return $resource(URL_BASE + URL_REL_VENDOR_PRODUCTS, {
        vendorId: function () {
            return UserAccountService.getUser().vendorId
        },
        id: '@id'
    }, {
        update: { method: 'PUT' }
    });
});

来自文档:

  

paramDefaults(可选)

     

url参数的默认值。这些可以在动作方法中重写。 如果一个参数值是一个函数,那么每当需要获取一个请求的参数值时,它将被执行(除非该参数被覆盖)。

- AngularJS $resource API Reference