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');
}
}
]);