Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/369.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在Angular中编辑带有Restangular的模型会中断PUT,因为Restangular追加了模型ID_Javascript_Angularjs_Restangular - Fatal编程技术网

Javascript 在Angular中编辑带有Restangular的模型会中断PUT,因为Restangular追加了模型ID

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发送数据的路径上 我想我可

我正在尝试为我的Angular应用程序创建编辑视图。我使用Restanglar作为处理CRUD操作的服务

这里的Plunker就是一个很好的例子:

但我不打算使用resolve。我不是亚伯,我没有得到向控制员转达的承诺

不过没什么大不了的,我只是在控制器中做我的单次进入,就像我在细节视图中做的那样

表单字段填充得很好。但是,当我执行PUT以保存编辑时,它会将模型ID附加到URL,以便有效地执行以下操作:
/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是否是合适的工具。我得再挖一点,这一秒我没有时间。