使用 $resource 在不影响负载的情况下设置路径参数
Set path parameter without affecting payload using $resource
首先,我想说的是,我为此进行了大量研究。即使在 docs 中,我也找不到简单直接的答案。 (如果你愿意,请叫我笨蛋,以防文档中提到它!我似乎无论如何都找不到它。)
问题是,我想向表单 URL 发出 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: '@vendorId'
的东西而不是 vendorId: UserAccountService.getUser().vendorId
但这会污染我的有效负载不是吗?
我不想保留我已经在示例中使用的机制,因为当您切换帐户时该机制不起作用,即,如果 UserAccountService.getUser()
已更新。基本上我必须重新加载整个页面才能再次初始化服务。
简而言之,问题是,正如标题所暗示的那样,如何设置路径参数 vendorId
而不使用类似代码段中的服务并且不修改负载?
将参数值设为函数:
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 (optional)
Default values for url parameters. These can be overridden in actions methods. If a parameter value is a function, it will be executed every time when a param value needs to be obtained for a request (unless the param was overridden).
首先,我想说的是,我为此进行了大量研究。即使在 docs 中,我也找不到简单直接的答案。 (如果你愿意,请叫我笨蛋,以防文档中提到它!我似乎无论如何都找不到它。)
问题是,我想向表单 URL 发出 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: '@vendorId'
的东西而不是 vendorId: UserAccountService.getUser().vendorId
但这会污染我的有效负载不是吗?
我不想保留我已经在示例中使用的机制,因为当您切换帐户时该机制不起作用,即,如果 UserAccountService.getUser()
已更新。基本上我必须重新加载整个页面才能再次初始化服务。
简而言之,问题是,正如标题所暗示的那样,如何设置路径参数 vendorId
而不使用类似代码段中的服务并且不修改负载?
将参数值设为函数:
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 (optional)
Default values for url parameters. These can be overridden in actions methods. If a parameter value is a function, it will be executed every time when a param value needs to be obtained for a request (unless the param was overridden).