2

Angular アプリの編集ビューを作成しようとしています。CRUD 操作を処理するためのサービスとして Restangular を使用しています。

ここのプランカーは素晴らしい例です: http://plnkr.co/edit/d6yDka?p=preview&codekitCB=406920728.784061

しかし、私は解決を使用するつもりはありません。私はコントローラーに渡す約束を得ることができませんでした。

大したことではありませんが、詳細ビューの場合と同じように、コントローラーで単一の get を実行するだけです。

フォーム フィールドが適切に表示されます。ただし、編集を保存するために PUT を実行すると、URL にモデル ID が追加されるため、次のことが効果的に行われます/api/tasks/33/33。PUT がデータを送信するパスにモデルの ID を追加しないようにするにはどうすればよいですか?

.put()のようなものでオーバーライドできると思います.put('tasks/' + $routeParams.taskId)。しかし、それはうまくいきません。もちろん、それは Restangular root_api が設定されていることを前提とし/api/ています。.put("tasks/" + $routeProvider.taskId)しかし、コンテンツを分割してAPIのURLに追加しようとすると、404エラーが発生します。

では、Restangular が URL に ID を追加するのを止めるにはどうすればよいでしょうか? または、何か間違ったことをしている場合、どうすればこれを正しい方法で行うことができますか?

参照用の私のコードは次のとおりです。

var myApp = angular.module('myApp', [
    'ngRoute',
    'ngAnimate',
    'restangular',
    'myAppControllers'
]);

myApp.config(
    function($routeProvider, RestangularProvider) {
        $routeProvider.
            when('/tasks/edit/:taskId', {
                templateUrl: '/static/partials/task-edit.html',
                controller: 'TaskEditCtrl'
            }).
            otherwise({
                redirectTo: '/tasks'
            });

            RestangularProvider.setBaseUrl('/api/');
            RestangularProvider.setParentless(true);
            RestangularProvider.setDefaultHttpFields({xsrfCookieName:'csrftoken', xsrfHeaderName:'X-CSRFToken'});
});

var myAppControllers = angular.module('myAppControllers', [
    'restangular'
]);

myAppControllers.controller('TaskEditCtrl', ['$scope', 'Restangular',

    function($scope, Restangular) {

        $scope.successMessage = true;

        Restangular.one("tasks/" + $routeParams.taskId).get().then(function(task){
            $scope.task = task;
        })

        var original = task;

        $scope.task = Restangular.copy(original);

        $scope.isClean = function() {
            return angular.equals(original, $scope.task);
        }

        $scope.save = function() {
            $scope.task.put().then(function(task) {
                $scope.successMessage = false;
            });
            console.log('saved');
        }
    }

]);
4

1 に答える 1

1

に電話する代わりにRestangular.one('tasks/' + <id>)、あなたが本当にするつもりだったのはRestangular.one('tasks', <id>). そうすれば、Restangular はルートが実際tasksには ではなくであることを認識しtasks/<id>ます。

于 2013-11-23T21:25:36.410 に答える