Javascript 在Angular中编辑带有Restangular的模型会中断PUT,因为Restangular追加了模型ID
我正在尝试为我的Angular应用程序创建编辑视图。我使用Restanglar作为处理CRUD操作的服务 这里的Plunker就是一个很好的例子: 但我不打算使用resolve。我不是亚伯,我没有得到向控制员转达的承诺 不过没什么大不了的,我只是在控制器中做我的单次进入,就像我在细节视图中做的那样 表单字段填充得很好。但是,当我执行PUT以保存编辑时,它会将模型ID附加到URL,以便有效地执行以下操作:Javascript 在Angular中编辑带有Restangular的模型会中断PUT,因为Restangular追加了模型ID,javascript,angularjs,restangular,Javascript,Angularjs,Restangular,我正在尝试为我的Angular应用程序创建编辑视图。我使用Restanglar作为处理CRUD操作的服务 这里的Plunker就是一个很好的例子: 但我不打算使用resolve。我不是亚伯,我没有得到向控制员转达的承诺 不过没什么大不了的,我只是在控制器中做我的单次进入,就像我在细节视图中做的那样 表单字段填充得很好。但是,当我执行PUT以保存编辑时,它会将模型ID附加到URL,以便有效地执行以下操作:/api/tasks/33/33。如何使其不将模型的id附加到PUT发送数据的路径上 我想我可
/api/tasks/33/33
。如何使其不将模型的id附加到PUT发送数据的路径上
我想我可以用类似于.put('tasks/'+$routeParams.taskId)
的东西覆盖.put()
。但这不起作用。当然,这假设Restangular root_api设置为/api/
,它就是这样。但这给了我一个404错误,因为它试图拆分.put(“tasks/”+$routeProvider.taskId)
的内容,然后将其附加到API的url中
那么,如何让restanglar停止将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');
}
}
]);
您真正想做的不是调用
restanglar.one('tasks/'+)
,而是调用restanglar.one('tasks',)
。这样,Restangular就知道该路径实际上是任务
,而不是任务
不起作用。URL上的结果相同。事实上,这样做会创建这个URL:/api/tasks/33/33?0=t&1=a&2=s&3=k&4=s&5=3&6=3。也许我设置错了?是的,我感觉你配置错了。然而,我没有看到你提供的代码对我有任何影响。它似乎试图将您提供的url视为GET参数,并将字符串拆分为“字符”。如果我根本不需要ID怎么办。假设资源是单个资源,它不是集合,也不存在子对象。如何仅引用单个资源,例如http://e.com/singleresource
。那么,我不确定Restangular是否是合适的工具。我得再挖一点,这一秒我没有时间。