自定义服务中的Angularjs $ resource默认参数

mar*_*cci 8 angularjs

假设我有

 angular.module('clientApp').factory('CreditCardResource', function($resource) {
   return $resource('/user/:userId/card/:cardId',
    {cardId:'@id'}, {
     charge: {method:'POST', params:{charge:true}}
    });
 });
Run Code Online (Sandbox Code Playgroud)

我希望能够将CreditCardResource与某个userId联系起来,这样每次我调用CreditCardResource.query()时都会获得与该用户相关的卡片.我不想每次都调用CreditCardResource.query({userId:123}).我希望资源保留为服务.

我想做一些像:CreditCardResource.defaultParams.userId = '123'在我的控制器中.

解决这个问题的最佳方法是什么?

mar*_*cci 7

从版本1.1.2开始,支持动态默认参数

https://github.com/angular/angular.js/commit/cc42c99bec6a03d6c41b8e1d29ba2b1f5c16b87d

基本上,而不是:

params: {
    apiKey: user.getApiKey()
}
Run Code Online (Sandbox Code Playgroud)

你用:

params: {
    apiKey: function() {
        return user.getApiKey();
    }
}
Run Code Online (Sandbox Code Playgroud)


Kev*_*one 6

Angular Resource Resource.bind()为这种确切的环境提供了一种方法(我在v1.0.3上).

在您的情况下,您的代码应该是:

var BoundCreditCard = CreditCard.bind({userId: '123'});

// Performs a GET on /user/123/card/456
var card = BoundCreditCard.get({cardId: "456"});
Run Code Online (Sandbox Code Playgroud)