基于params的动态$ resource URL

时间:2014-07-21 17:57:37

标签: javascript angularjs

我试图点击一个看起来像/shop/<item_id>

的端点

但是,因为它还需要一个身份验证令牌,所以我将一个数组与令牌一起发送到$resource
APIshop.create([CreateCampaignService, {auth_token: User.token}]

我怎样才能这样做APIshop能够采取这样的方式:
APIshop.create([CreateCampaignService, {auth_token: User.token}, {item_id: Cart.item_id}])并点击/shop/<item_id>

这是APIshop:

app.provider('APIshop', function(API_URL) {
    this.$get = ['$resource', function($resource) {
        var shop = $resource(API_URL.url + API_URL.loc + ':service/', {service: '@service'},   { 
            'create':  {method:'POST', isArray: false, params: {service: 'shop'}},
            'update':  {method:'PUT', isArray: false, params: {service: 'shop'}}
        });
        return shop;
    }];
});

2 个答案:

答案 0 :(得分:0)

您不能在数组中发送它,因为除非您连接令牌和项ID,否则它只接受一个参数。这是不好的做法。您应该在请求的标头中包含令牌。

在这里查看更多信息

Basic Authentication with a Guid token for REST api instead of username/password

答案 1 :(得分:0)

paramDefaults

下的https://docs.angularjs.org/api/ngResource/service/ $资源
  

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

     

参数对象中的每个键值首先绑定到url模板   如果存在,则将任何多余的键附加到URL搜索   查询之后?。

     

给定模板/路径/:动词和参数{动词:'问候',   称呼:'Hello'}导致URL / path / greet?salutation = Hello。

     

如果参数值以@为前缀,那么该值的值   参数将取自数据对象上的相应键   (对非GET操作很有用)。

所以这应该适用于存储在某处的TOKEN(可能是$ rootScope):

app.provider('APIshop', function(API_URL) {
    this.$get = ['$resource', function($resource) {
        var shop = $resource(API_URL.url + API_URL.loc + ':service/:id', {service: '@service', id:'@id'},   { 
            'create':  {method:'POST', isArray: false, params: {service: 'shop', access_token: TOKEN}},
            'update':  {method:'PUT', isArray: false, params: {service: 'shop', access_token: TOKEN}}
        });
        return shop;
    }];
});