ng $资源无法动态生成URI

时间:2014-08-19 23:51:55

标签: angularjs angular-resource

问题:

我有代码来设置似乎无错误地编译的$资源:

var ReportsRest = $resource('/reports/:reportId', {reportId: '@id'});
ReportsRest.get({id: 123});

但是当该代码实际执行时生成的请求url如下所示:

GET http://localhost:5523/reports?id=123 404 (Not Found)

不会解析id并将其动态加载到URI中。有什么东西我不见了吗?

Plunkr

http://plnkr.co/edit/3ikqMsnDI9r9LThaQLf3?p=preview

1 个答案:

答案 0 :(得分:1)

试试这个:

var ReportsRest = $resource('/reports/:reportId', {reportId: '@id'});
ReportsRest.get({reportId: 123});

$resource Usage下,有一个文本块。

paramDefaults

  

url参数的默认值。这些可以在动作方法中重写。如果任何参数值是一个函数,则每次需要获取请求的参数值时都会执行该函数(除非重写了参数)。

     

参数对象中的每个键值首先绑定到url模板(如果存在),然后在?之后将任何多余的键附加到url搜索查询。

     

给定模板/路径/:动词和参数{动词:'问候',称呼:' Hello'}导致URL /path/greet?sututation=Hello.

     

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

总而言之,您传入的对象需要使用paramDefaults对象的来获取值。该值将替换您的网址格式中相同的:key文字。 paramDefaults对象中以@为前缀的任何值都将在返回的模型数据上设置为名为@之后的属性。

var ReportsRest = $resource('/reports/:reportId', {reportId: '@id'});
ReportsRest.get({
    reportId: 123,
    other: 123
}, function(data) { /* ... */ });

这向/reports/123?other=123发出请求。回调中的data看起来像{ id: 123 }