使用' @'在角度资源 - 我做错了吗?

时间:2015-04-13 11:00:21

标签: angularjs angular-resource

这是我的资源:

.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 }

1 个答案:

答案 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的这篇精彩帖子