4

ユーザーオブジェクトを返すREST APIがあり、その役割は別のオブジェクトへのリンクを介して指定されます。JSONlocalhost/project/api/users/27/オブジェクトは次のとおりです。

{
    "id": 42,
    "name": "John",
    "prijmeni": "Doe",
    "login": "johndoe",
    "nickname": null,
    "grade": 1.3,
    "roles": {
        "href": "http://localhost/project/api/users/1716/roles/"
    }
}

私がやろうとしているのは、コントローラーで役割を取得することです。私のユーザーサービスは次のようになります。

projectServices.factory('User', ['$resource', 'UserRoles',
    function($resource, UserRoles, Role) {
        var User = $resource('http://localhost/project/api/users/:id', {}, {
            'query': {
                method: 'GET',
                isArray: true
            }
        });
        return User;
    }
]);

そして、(そのリソースコードブロックに)追加しようとしました:

User.prototype.roles= function(){
   return UserRoles.get({id:42});
};

これは、ngRepeat で呼び出されたときにブラウザをフリーズします。だから私は試しました

User.prototype.roles = UserRoles.get({id:42});

これは機能します。それから私は試しました

User.prototype.roles = $resource(this.roles.href, {}, {
   'get': {
      method: 'GET',
      isArray: true
   }
});

それrolesは未定義です。transformResponseまた、ユーザー サービスGETアクションにparamを追加しようとしましたが、その関数は呼び出されませんでした。

2 番目のオプションは問題なく機能しますが、ユーザー ID をハードコーディングする必要があります。適切な解決策は、どうにかしてユーザー ID を取得することです (試してみましthis.idたが、うまくいきませんでした)。

完璧な解決策は、指定された からリソースを作成することですが、プロトタイプでhrefはアクセスできないためroles、方法がわかりません。

アドバイスをありがとう。

4

1 に答える 1

1

これでうまくいくはずです

projectServices.factory('UserRoles', function(){
    return $resource('http://localhost/project/api/users/:id', {id: @id}, 
        {'query': {
            method: 'GET',
            isArray: true
        })
}

今、あなたはそれを呼び出すことができます

UserRoles.get({id:42})  
// this makes the request :     http://localhost/project/api/users/42

@idは、渡されたパラメーターのidキーを使用するように angular に指示します。

于 2014-11-04T13:39:36.233 に答える