8

私が持っているとしましょう

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

CreditCardResourceを特定のuserIdに関連付けて、CreditCardResource.query()を呼び出すたびに、そのユーザーに関連するカードを取得できるようにしたい。毎回CreditCardResource.query({userId:123})を呼び出したくありません。そして、私はリソースをサービスとして維持したいと思っています。

コントローラーで次のようなことをしたいと思いますCreditCardResource.defaultParams.userId = '123'

この問題に取り組むための最良の方法は何ですか?

4

4 に答える 4

8

バージョン1.1.2以降、動的なデフォルトパラメータがサポートされています

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

基本的に、代わりに:

params: {
    apiKey: user.getApiKey()
}

あなたが使う:

params: {
    apiKey: function() {
        return user.getApiKey();
    }
}
于 2013-01-24T14:52:38.553 に答える
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"});
于 2013-02-19T23:59:19.277 に答える
1

$ resource.query()のインスタンスを装飾できますか?これは一般的な非角度の例ですが、うまくいけば要点がわかります。この場合の「someObj」は$resourceであり、コントローラーは「defaultValue」の値を設定できます。

  var proxiedFn, someObj;

  someObj = {
    someFn: function(valueA, valueB) {
      console.log("Called with " + valueA + " and " + valueB);
    }
  };

  someObj.someFn('foo', 'bar'); /* before the proxy */
  proxiedFn = someObj.someFn;

  someObj.someFn = function(valueB) {
    return proxiedFn(this.defaultValue, valueB);
  };

  someObj.defaultValue = 'boz';
  someObj.someFn('bar'); /* after the proxy with default value */
于 2012-11-09T21:58:02.387 に答える
1
angular.module('clientApp')
.factory('User', ['$resource', 'UserCard',
    function ($resource, UserCard) {
        var User = $resource(
            "user/:id",
            {id: "@id" },
            {
                'save': {method: 'PUT'},
                'add': {method: 'POST'}
            }
        );
        User.prototype.getCards = function (params, callback) {
            UserCard.prototype.userId = this.id;
            params.userId = this.id;
            return UserCard.query(params, callback);
        };
        return User;
    }])
.factory('UserCard', ['$resource',
    function ($resource) {
        return $resource(
            "user/:userId/card/:id",
            {userId: '@userId', id: "@id" },
            {
                'save': {method: 'PUT'},
                'add': {method: 'POST'}
            }
        );
    }])
.controller('TestCtrl', ['User',
    function (User) {
        // GET user/123
        var user = User.get({id: 123}, function () {
            // GET user/123/card/321
            var card = user.getCard({id: 321}, function () {
                card.someAttribute = 'Some value';
                // PUT user/123/card/321
                card.$save();
            });
        });
    }])
;

私のコードを確認してください。このようにして、すでにユーザーに関連付けられているカードを取得するので、card。$ save()またはcard。$ query()は、userId、パラメーター、またはカードのプロパティを渡す必要はありません。

于 2014-05-15T13:34:08.597 に答える