允许Angular ngResource调用的动态参数名称

时间:2015-01-19 19:56:32

标签: angularjs angularjs-directive ngresource

我正在尝试使用带有自定义属性的自定义Angular指令,即:filterBy=:filter。这是通过这样的自定义指令完成的:

<foo filterBy=location filter=ABC></foo>

服务:

function Foo($resource) {
    return $resource(base + 'Foo');
}

ngResource电话:

var filterBy = attrs.filterBy;
var getSegments = Foo.get({filterBy: attrs.filter, limit: attrs.limit, offset: attrs.offset});

返回:

http://localhost:8000/base/Foo?filterBy=ABC&limit=30(注意它说“filterBy”而不是位置“)

它应该返回此资源: http://localhost:8000/base/Foo?locations=Bar&limit=30

似乎filterBy在ngResource调用中变成了一个字符串。我不想使用attrs.filterBy的值,但它不喜欢参数值中的点表示法。

我也试过这个:

            var getFilter = function() {
                return attrs.filterBy;
            };

但是当我这样做时,资源URL变为:

http://localhost:8000/base/Foo?getFilter=Bar&limit=30

请注意,“getFilter”现在是参数。那么有没有办法创建自定义参数?

1 个答案:

答案 0 :(得分:0)

var filterBy = attrs.filterBy;
var params = {limit: attrs.limit, offset: attrs.offset};
params[filterBy] = attrs.filter;
var getSegments = Foo.get(params);

当你写filterBy: value时,filterBy是一个标识符。这是静态的。它与任何变量都没有任何关系。

另一方面,

params[filterBy] = attrs.filter;动态添加属性,括号内的值是可以解析为字符串的表达式。所以它可以是变量。