为什么angular $ resource查询并获得来自同一URL的不同响应?

时间:2015-07-23 23:03:30

标签: javascript angularjs rest angular-resource

我问这个是因为它让我觉得我不能做一些有角度的事情。因为我的代码不必要地复杂。

我已经定义了资源

Question = $resource("/questions/:id", {id: "@id"});

现在,如果我这样做

Question.get(1);

它将转到/ questions / 1并期望一个对象作为响应 如果我做

Question.query({id: 1});

它将转到/ questions / 1,但期望一个数组作为响应

由于isArray的默认设置,我明白为什么会这样做。

我有客户端代码,我不知道它会查询多少个ID。 我可以通过使用我的角度代码来轻松解决这个问题

if (ids.length == 1)
  Question.get(ids);
else
  Question.query({id: ids})

让我的服务器在数组长度为1时发送一个对象,但这看起来过于复杂,让我觉得我必须以错误的方式解决这个问题。

有更清洁的解决方案吗?

1 个答案:

答案 0 :(得分:0)

不确定这是否是有角度的方式,但我遇到的解决方案稍微清晰一点就是在我的查询中使用不同的参数,以便它在rails而不是show上命中索引方法,因此可以安全地总是返回一个数组

像这样:

Question = $resource("/questions/:id", {id: "@id"});

q = Question.get(1);
// Performs GET /questions/1
// q = { id: 1, ...};

q = Question.query({ids: 1});
// Performs GET /questions?ids=1
// q = [{id: 1, ... }];

q = Question.query({ids: [1,2]});
// Performs GET /questions?ids=1&ids=2
// q = [{id: 1, ... }, {id: 2, ...}];