Angularjs资源URL

时间:2014-09-15 23:41:42

标签: javascript angularjs angularjs-resource

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

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

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

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

我使用angularjs v1.2.24

任何人都可以帮助我吗? 感谢

1 个答案:

答案 0 :(得分:5)

$resource paramDefaults文档中所述:

  

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

     

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

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

  

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

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

<强> EXAMPLE DEMO

假设您的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();

});