3

パラメータに応じてバックエンドを呼び出すサービスを作成したいと考えています。このコードは機能しませんが、私が達成したいことを示してくれることを願っています:

myproject.factory('Item', function($resource) {
    if (@id !== undefined)
        return $resource('/resource/item/:id/item.json', {id: '@id'});
    else if (@userid !== undefined)
        return $resource('/resource/user/:userid/items.json', {userid: '@userid'});
});

基本的に、最初のオプションは ID で 1 つのアイテムのみを返し、2 番目のオプションはユーザー ID で複数のアイテムを返します。

次に、次のようにそのサービスを呼び出せるようにしたいと思います。

$scope.item = Item.get({id: id}, function() {...}

また

$scope.items = Item.query({userid: userid}, function() {...}

そのようなことを達成するための最良の方法は何ですか? すべてに対して個別のサービスを作成する必要がありますか?

ありがとう!

4

2 に答える 2

6

actionsカスタムパラメーターを使用してデフォルトの URL をオーバーライドできます: $resource ドキュメントを参照してください。

私はこのようなことを意味します:

$resource('/resource/item/:id/item.json', {}, {
    query: {
        url: '/resource/user/:userid/items.json',
        method: 'GET',
        isArray: true
    }
});

カスタム URL を使用する必要がありますが、現在.get()およびその他の要求はデフォルト URL を使用します。.query()

このurlプロパティは Angular 1.2 (現在は安定版リリース) で新しく追加されたものであることに注意してください。

于 2013-11-16T18:19:17.537 に答える
0

代わりにクエリ文字列パラメーターを使用してください。

しかし、それがあなたであろうと他の誰かであろうと、次にそれをサポートする人、またはそれを更新したい人のことを考えなければなりません。過度に一般的で複雑にすることは、誰の助けにもなりません。すぐに構築して維持することが難しくなります。

エンティティはuseritemであるため、ベスト プラクティスは、アプリが利用できる個別のリソースとして扱うことです。

于 2013-04-10T10:34:34.300 に答える