AngularJS资源URL

5

我是一个AngularJS的初学者,但在这段代码中找不到我的错误。

   var myCarResource = $resource('cars/:carId', 
        {
            carId:'@id'
        });
    var car = myCarResource.get({id:'abc'});

期望的URL: .../cars/abc

实际调用的URL是: .../cars?id=abc

我正在使用angularjs v1.2.24

有人能帮我吗? 谢谢


2
也许这可以帮助:http://stackoverflow.com/questions/16677487/angularjs-resource-builds-wrong-resource-url - Yalamber
1个回答

5
$resourceparamDefaults 文档所述:

给定模板 /path/:verb 和参数 {verb:'greet', salutation:'Hello'},结果为 URL /path/greet?salutation=Hello。

如果参数值以 @ 开头,则该参数的值将从调用操作方法时提供的数据对象(provided when calling an action method)中的相应属性中提取。例如,如果 defaultParam 对象是 {someParam: '@someProp'},则 someParam 的值将是 data.someProp。

这表明,在参数化 URL 中定义的任何动词与 $resource 的参数默认值或 $resource 类方法(get、save 等)的参数匹配的键相匹配时,该键的对应值将替换 URL 中的动词。另一方面,'@' 符号在此上下文中未得到正确解释,它应该是:

如果参数值以 @ 开头,则该参数的值将从调用实例操作方法时提供的数据对象中提取。

实例操作方法($get、$save、$delete 等)是用于使用 $resource 类操作方法检索的数据对象的方法。这些通常在使用相同资源链接请求时很有用。 示例演示 假设你的 cars/abc 返回响应的 JSON 如下:
{
  "id": "abc"
}

查看注释,以了解每个操作方法调用的响应。

var myCarResource = $resource('cars/:carId', 
{
  carId:'@id'
});


// This sends a GET request '/cars/?id=abc
myCarResource.get({id:'abc'}); 

// This sends a GET request '/cars/abc'
myCarResource.get({carId:'abc'}); // returns {"id": "abc"}

myCarResource.get({carId:'abc'}).$promise.then(function(car) {

  // sends a POST request '/cars/abc', it replaces the :carId verb from the
  // @id notation you have defined in the parameter default. It also sends,
  // other parameter defaults defined with '@' that are defined as verbs in the url.
  car.$save();

}); 

从@Yalamber的评论/链接中,另一个选项是执行以下操作:myCarResource.get({},{id:'abc'}); 从我有限的理解来看,我认为第一个对象直接与URL模式相关,因此必须匹配URL中:param的名称(在本例中为carId)。第二个对象是在使用'@id'时使用的,它将提取第二个对象的ID并将其与:carId匹配。 - Anthony F.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接