Angularjs资源URL

use*_*118 5 javascript angularjs angularjs-resource

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

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

预期网址: .../cars/abc

被叫URL是: .../cars?id=abc

我正在使用angularjs v1.2.24

谁能帮我?谢谢

rye*_*lar 5

$ resource paramDefaults文档中所述:

给定模板/路径/:动词和参数{动词:'问候',称呼:'你好'}导致URL /路径/问候?称呼=你好.

如果参数值以@为前缀,那么将从 数据对象上的相应属性中提取该参数的值(在调用操作方法时提供).例如,如果defaultParam对象是{someParam:'@ someProp'},那么someParam的值将是data.someProp

这表明在parameterizd url中定义的任何谓词与$resource's参数默认值或$resource类方法(get,save等)参数中定义的键匹配,将具有该键的相应值替换url中的谓词.另一方面,'@'符号在这种情况下没有得到恰当的解释,应该是:

如果参数值以@为前缀,那么将从数据对象上的相应属性中提取该参数的值(在调用实例操作方法时提供).

实例操作方法($ get,$ save,$ delete等)是用于使用类操作方法检索的数据对象的$resource方法.在使用相同资源链接请求时,这些通常很有用.

示例演示

让我们假设您cars/abc返回一个响应json:

{
  "id": "abc"
}
Run Code Online (Sandbox Code Playgroud)

阅读显示每个操作方法调用的响应的注释.

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();

}); 
Run Code Online (Sandbox Code Playgroud)