2

次の角度コードがあります。

var app = angular.module('app', ['ngResource']);

app.factory('Post', function ($resource) {
    return $resource('/post', {}, {
        query: { method: 'GET', url: '/post/get/:id', params: { id: '@id' } },
        save: { method: 'POST', url: '/post/addorupdate/:id', params: { id: '@id' } },
        delete: { method: 'POST', url: '/post/delete/:id', params: { id: '@id' } }
    });
});

app.controller('appController', function ($scope, Post) {
    $scope.createPost = function () {
        var post = new Post({
            title: "Test post",
            body: "Test body.<br/ >Yay!"
        });
        post.$save();
    };
});

マークアップは次のようになります。

<body data-ng-app="app">
    <div data-ng-controller="appController">
        <button ng-click="createPost()">Create Post</button>
    </div>
</body>

ボタンをクリックすると、サーバーに対して POST を実行しようとしますが、アクション固有の URL ではなく、元の URL に対して実行されます。リクエストの URL は次のようになります。

http://localhost:8080/post?id=undefined

なぜ POST しようとしているの/postですか?また、理由はありid=undefinedますか?他の例では?id=blah、ID が指定されていない場合、リクエストに含まれていないように見えます。前もって感謝します。

4

1 に答える 1

1

これは、この記事の執筆時点での AngularJSの現在のバージョン (1.0.8) のバグです。アクションオーバーライドのプロパティを無視しています。これはバージョン 1.1.4で修正されており、修正は最新のリリース候補 (1.2.0)に含まれています。ngResourceurl

于 2013-11-06T06:44:12.513 に答える