我正在尝试为我的 Angular App 创建一个编辑视图。我使用 Restangular 作为处理我的 CRUD 操作的服务。
这里的 Plunker 就是一个很好的例子:http ://plnkr.co/edit/d6yDka?p=preview&codekitCB=406920728.784061
但我不会使用resolve。我不能得到传递给控制器的承诺。
不过没什么大不了的,我只是像查看详细视图一样进入控制器。
表单字段填充得很好。但是,当我执行 PUT 以保存编辑时,它将模型 ID 附加到 URL 以便它有效地执行以下操作/api/tasks/33/33
:如何让它不将模型的 id 附加到 PUT 将数据发送到的路径上?
我认为我可以.put()
用.put('tasks/' + $routeParams.taskId)
. 但这行不通。当然,这假设 Restangular root_api 设置为/api/
它所在的位置。但这给了我一个 404 错误,因为它试图拆分内容,.put("tasks/" + $routeProvider.taskId)
然后将其附加到 API 的 url。
那么,如何让 Restangular 停止将 ID 附加到 URL 中?或者,如果我做错了什么,我该如何以正确的方式做到这一点?
这是我的代码供参考。
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');
}
}
]);