什么是" @"符号在ngRequest中执行

时间:2014-11-02 04:27:22

标签: angularjs ngresource

我看到例如我们可以在AngularJS ngResource中做这样的事情 $resource('seeks/:seekId', { seekId: '@_id'});但我不确定@符号的作用。

1 个答案:

答案 0 :(得分:2)

来自AngularJS资源docs:

  

$ resource(url,[paramDefaults],[actions],options);

     

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

这意味着什么:

假设我们的服务器返回:

{_id: 123, otherField: 'someValue'}

此GET请求:'/seekId/123'

如果我们想使用ngResource检索这些数据,我们可以这样做:

var SeeksResource = $resource('/seeks/:seekId');
SeeksResource.get({seekId: 123}, function (seek){
    // GET request: /seekId/123
    // Server response: {_id: 123, otherField: 'someValue'}
});

但是当我们想要进行更新时:

var SeeksResource = $resource('/seeks/:seekId', null, {update: {method:'PUT'}});
SeeksResource.update({_id: 123, otherField: 'otherValue'}, function (seek) {
    // PUT: /seekId
    // Server return: ERROR because seekId was not provided, there is nothing about :seekId anywhere in our request
});

我们可以使用@:

解决这个问题
var SeeksResource = $resource('/seeks/:seekId', {seekId: '@_id'}, {update: {method:'PUT'}});
SeeksResource.update({_id: 123, otherField: 'otherValue'}, function (seek) {
    // PUT: /seekId/123
    // Server return: {_id: 123, otherField: 'someValue'}
});

现在有效,因为当请求发出时,$ resource service从" _id"获取:seekId的值。提供的数据对象的属性。

也很高兴知道$ resource服务将仅对非GET请求使用@符号。

jsFiddle示例:http://jsfiddle.net/wnzr721o/