55
$resource("/entries/:id", {id: "@id"}, {update: {method: "PUT"}})

@idとは?

$resource doc ページで、誰かがこれを以下に述べていますが、私はまだ理解していません。

パラメーター値の前に @ が付いている場合、そのパラメーターの値はデータ オブジェクトから抽出されます (非 GET 操作に役立ちます)。ここでのデータ オブジェクトは、postDataGET 以外の「クラス」アクションが使用される場合のオブジェクトを参照します。 GET 以外のインスタンス アクションが使用されている場合は、インスタンス自体。

4

2 に答える 2

67

私がこれを正しく理解していれば、そうでないかもしれませんが、パラメーター{id: @id}は、url 変数にデータを提供する別の方法を示しています。

この方法を考えると:

var myResource = $resource("/posts/:theName", 
                           {theName: '@petName'},
                           {enter : {
                                      method: "POST", 
                                      isArray: false
                                     }
                            });

投稿するデータに属性「petName」がある場合、その属性の値は:theName私の URL の変数に配置されます。投稿データが{"petType": "cat", "petName": "Spot"}であると想像してください。URL は となります"/posts/Spot"。私の考えでは、@投稿されるオブジェクトの「属性」を意味します。

その値から を取り除く@と、url 変数はそのリソース パラメータの値を直接参照します。

{theName: 'petName'} //no "@"
// url output ---->   '/posts/petName'

.

参照チェーンは次のとおりです。

//url var--> //$resource param {..}  --->//Object to be posted
:theName---> {theName ----> @petName ---> {petName---> "Spot"

「Spot」を URL に入れるのに 5 つのステップしかかかりませんでした。

.

上記の例を使用したリソース インスタンスの例:

var postData = new myResource();
    postData.petType = "cat";
    postData.petName = "Spot";
    postData.$enter({}, function(data){
        $scope.data = data;
    })
    // url to post to will be '/posts/Spot', postData object will be 
    //  {"petType":"cat", "petName:"Spot"}

余談ですが、ドキュメントは非常に混乱する可能性があります。難しいコースを受講したことがありますが、教授はあなたの言語をほとんど話せない優秀な人でしたか? うん。

于 2013-07-10T00:29:16.620 に答える