当参数名称更改时,使用PUT的angularjs $资源更新失败

时间:2013-05-13 20:44:26

标签: angularjs angularjs-resource

我在这里理解或代码中遗漏了一些东西......

我有一个非常基本的CRUD应用程序来列出/添加/编辑/删除类别,当我将表上的主键定义为“id”时它可以正常工作,但是当我将数据库列重命名为“categoryId”时“,PUT网址不包含密钥值,我最终因未处理的路径出现404错误...

堆栈:

IIS 7.5 w / Slim PHP for RESTful services

// Route excerpt
...
          when('/categories',       {templateUrl: 'partials/categoryList.html',   controller: CategoryListCtrl}).
          when('/categories/new',   {templateUrl: 'partials/categoryDetail.html', controller: CategoryNewCtrl}).
          when('/categories/:id',   {templateUrl: 'partials/categoryDetail.html', controller: CategoryEditCtrl}).
...

angular.module('myServices', ['ngResource']) 
.factory('Category', function($resource){ 
    return $resource('../api/index.php/categories/:id', {id:'@categoryId'}, 
        { update: {method:'PUT' } } 
     ); 
})




// WORKS when attribute is 'id'
.factory('Category', function($resource){
        return $resource('../api/index.php/categories/:id', {id:'@id'}, 
            { update: {method:'PUT' } }
        );
    })


// FAILS with 404 when attribute is 'categoryId'
.factory('Category', function($resource){
        return $resource('../api/index.php/categories/:id', {id:'@categoryId'}, 
            { update: {method:'PUT' } }
        );
    })

当然,代码中有许多其他地方更改了名称,但我看到的效果似乎与ngResource有关。

第一种方法产生一个有效的URL ......

 categories/1?description=null&name=Observation&report=null
/api/index.php

第二个产生这个......

 categories?categoryId=1&description=null&name=Observation&report=null
/api/index.php

由于路径格式错误导致404错误。

是否需要另一个参数(或指令或其他东西)才能在网址中使用重命名的属性?

1 个答案:

答案 0 :(得分:1)

我使用第二个资源测试了put,它按预期工作。我可以重现的唯一方法是,如果我发出GET而不是PUT。如果您打开此演示并查看网络选项卡(chrome / etc),您可以看到放置的内容和产生的内容。

http://plnkr.co/edit/tI9KpqDp49pXuJJVjivm?p=preview

GET生成查询字符串参数化数据:

GET产生:

Request URL:http://run.plnkr.co/api/index.php/categories?categoryId=123
Request Method:GET

PUT产生:

Request URL:http://run.plnkr.co/api/index.php/categories/123
Request Method:PUT

代码:

   var test= $resource('../api/index.php/categories/:id', {id:'@categoryId'}, 
        { update: {method:'PUT' } }
    );

     var test2= $resource('../api/index.php/categories/:id', {id:'@categoryId'}, 
        { get: {method:'GET' } }
    );

    test.update({categoryId:123});
    test2.get({categoryId:123});