这是我的资源:
.factory('Posting', ['$resource', function ($resource) {
return $resource('api/Postings/:action/:arg', {}, {
findByParent: { method: 'GET', params: { action: 'parent', arg: '@guid' }, isArray: true },
findByReference: { method: 'GET', params: { action: 'reference', arg: '@reference' }, isArray: true }
});
}]);
在我的控制器中,我使用我的资源:
Posting.findByParent({ guid: parent_guid },
function (success) {
...
},
function (error) {
...
});
这会返回网址 / parent?guid = 0ff646e9-4397-4654-b8d2-118c6258023a
但是,使用我的资源:
Posting.findByParent({ arg: parent_guid },
function (success) {
...
},
function (error) {
...
});
给我正确的网址: / parent / 0ff646e9-4397-4654-b8d2-118c6258023a
我认为使用' @'是给参数更好的名字?
我也想知道我是否仍然应该使用$ resource,即使我的API不是真的RESTful。
为自定义(unRESTful)函数提供自己的URL是否更好?类似的东西:
findByParent: { method: 'GET', url: 'api/Postings/parent/:guid', params { guid: '@guid' }, isArray:true }
答案 0 :(得分:1)
默认情况下,如果在路径上定义参数(就像使用arg
一样),并传入一个具有匹配键的对象,就像在第二个示例中一样,该键将用于解决路径。
但是,如果没有匹配的参数,传入的对象的键将解析为查询参数,如第一个示例中所示。
要设置自定义默认值解析,您需要在资源的第二个参数中指定它们,如下所示:
.factory('Posting', ['$resource', function ($resource) {
return $resource('api/Postings/:action/:arg',
{
action: '@action',
arg: '@guid'
},
{
findByParent: { method: 'GET', params: { action: 'parent' }, isArray: true },
findByReference: { method: 'GET', params: { action: 'reference' }, isArray: true }
});
}]);
这应该使操作解析为findByParent和findByReference中指定的内容,并指向传递给键guid
的任何值。
你可以尝试在相应的方法中设置一个@ guid'属性,但对于你的用例,它似乎没有必要。
回答第二个问题:您可以在单个路径元素(级别)上指定多个参数控制器。唯一的条件是您不能在单个方法中使用/指定多个分辨率的分辨率。也就是说,只要您在单独的方法中指定api/Postings/:action:anotherController/:arg
和:action
的分辨率,就可以:anotherController
。
请使用示例使用
找到Ben Nadel http://www.bennadel.com/blog/2433-using-restful-controllers-in-an-angularjs-resource.htm的这篇精彩帖子