angular $ resource pattern / messages /:if /:controller not working

时间:2014-09-21 08:45:23

标签: angularjs

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

帮助我。

2 个答案:

答案 0 :(得分:2)

从文档:https://docs.angularjs.org/api/ngResource/service/$resource,您只能使用后缀,因此没有sparam前缀。

您可以尝试仅使用:sid:paramid来捕获参数,然后在s构造函数中修剪paramUser部分。< / 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
});