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