【问题标题】:Angularjs Resource URLAngularjs 资源 URL
【发布时间】:2014-11-09 14:24:39
【问题描述】:

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

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

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

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

我正在使用 angularjs v1.2.24

谁能帮助我? 谢谢

【问题讨论】:

标签: javascript angularjs angularjs-resource


【解决方案1】:

$resource paramDefaults 文档中所述:

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

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

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

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

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

EXAMPLE DEMO

假设你的cars/abc返回一个响应json:

{
  "id": "abc"
}

阅读显示每个操作方法调用响应的 cmets。

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
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多