0

4 つの REST 動詞 (GET/POST/PUT/DELETE) をすべて実行するクライアントを作成しようとしていますが、PUT 以外はすべて完了しています。私が取り組んでいる REST/CRUD API は、PUT /realmen/ID-string を呼び出し、キーと値のペアを JSON として含めることによって、エントリを更新したいと考えています。POST の場合、これは「自動的に」機能するように見えますが、PUT では機能しません。

私のHTMLは次のようになります:

<div id="list">
<form novalidate class="edit-form">
<p>Title <input ng-model="realmen.title" type="text" value="{{realmen.title}}" /></p>
<p>Real Men <input ng-model="realmen.realmen" type="text" value="{{realmen.realmen}}" />  </p>
<p>Real Role-Players <input ng-model="realmen.realroleplayers" type="text" value="realmen.realroleplayers}}" /></p>
<p>Loonies <input ng-model="realmen.loonies" type="text" value="{{realmen.loonies}}" /></p>
<p>Munchkins <input ng-model="realmen.munchkins" type="text" value="{{realmen.munchkins}}" /></p>
<input ng-model="realmen.entryId" type="hidden" value="{{entryId}}"/>
<button ng-click="change()">UPDATE ({{entryId}})"</button></p>
</form>
</div>

私のコントローラーは次のようになります。

$scope.realmen = RealMen.get({entryId: $routeParams.entryId}, function() {
      $scope.master = angular.copy($scope.realmen); // For resetting the form
});

$scope.change = function() {
    console.log($scope.realmen);
    RealMen.update({entryId: $scope.entryId}, function() {
            $location.path('/');
    });
}

最後に、私のサービスは次のようになります。

angular.module('realmenServices', ['ngResource']).
factory('RealMen', function($resource){
    var RealMen = $resource(
        'http://localhost\\:3000/realmen/:entryId',
        {},
        {
                query: {method:'GET', params:{entryId:''}, isArray:true},
                post: {method:'POST'},
                update: {method: 'PUT', params:{entryId:'@entryId'}},
                remove: {method:'DELETE'}
        });

    return RealMen;
});

PUT は URL の正しい ID 値で呼び出されますが、リクエスト ペイロードには entryId しか含まれていないため、バックエンド API は期待されるキーと値を取得せず、基本的にデータベース内のレコードを空白にします。

console.log($scope.realmen) には、多くの追加データとともにフォーム フィールドが表示されます。RealMen.update($scope.realmen, ...) を呼び出してみました (.save() の呼び出しと同様) が、これらの余分なフィールドはすべて、URL へのクエリ文字列パラメーターとして見事に醜い方法で追加されます。

4

1 に答える 1

0

your$scope.realmenはリソース インスタンスであるため、 を使用する代わりに、RealMen.update単に呼び出すことができます$scope.realmen.$update()(「$」があることに注意してください)。インスタンス アクション メソッドがデータの送信を処理します。

于 2013-06-29T07:05:02.597 に答える