var User = $resource(
'/s:userId/param:otherid',
{
userId: '@id',
otherid:'@ids'
}
);
User.get({
id: '2',
ids: '2'
}, function(resp) {
debugger
}, function(err) {
// Handle error here
});
我想要创建地址请求:
/ s1 / param1'或/ s2 / param2'
但是在firebug网络中我看到要求地址 / s / param?id = 2& ids = 2
帮助我。
答案 0 :(得分:2)
从文档:https://docs.angularjs.org/api/ngResource/service/$resource,您只能使用后缀,因此没有s
或param
前缀。
您可以尝试仅使用:sid
和:paramid
来捕获参数,然后在s
构造函数中修剪param
和User
部分。< / p>
答案 1 :(得分:2)
您误解了$resource
网址和动词表达的概念。如 $resource documentation :
参数对象中的每个键值首先绑定到网址模板 如果存在,则将任何多余的键附加到URL搜索 查询之后?。
给定模板/路径/:动词和参数{动词:&#39;问候&#39;, 称呼:&#39; Hello&#39;}导致URL /路径/问候?敬礼=你好。
由于您的网址包含以下动词::userId
,:otherid
,因此您的请求对象应如下所示:
User.get({
userId: '2',
otherid: '2'
}, function(resp) {
debugger
}, function(err) {
// Handle error here
});
另一个误解是使用@
符号,文档声明:
如果参数值以@为前缀,则为该值的前缀 参数将从对应的属性中提取出来 数据对象(在调用操作方法时提供)。例如, 如果defaultParam对象是{someParam:&#39; @ someProp&#39;}那么值 someParam将是data.someProp。
@ notation仅适用于实例操作方法($ get,$ save,$ query等)。阅读以下代码中提供的评论:
// Sends GET /s2/param2
User.get({
userId: '2',
otherid: '2'
}, function(resp) {
// Let's assume the resp returns {id: 2, ids: 2}
// Then the request below will use you're @ notation (@id, @ids) as a substitute
// to the verbs defined in your url (:userId, :otherid) respectively.
// Sends POST /s2/param2
resp.$save();
}, function(err) {
// Handle error here
});