Restangular中.all()和.one()之间有什么区别?

时间:2014-03-20 11:22:40

标签: angularjs restangular

这两者有什么区别?两者似乎都对/ users进行了GET并检索它们。

Restangular.one('users').getList().then(function(users) {
    // do something with users
});

Restangular.all('users').getList().then(function(users) {
    // do something with users
});

我知道你可以做一个('用户' 123)并且它将检索/ users / 123但是没有第二个参数它似乎是同一个东西。为什么不在这种情况下只使用一种方法?

3 个答案:

答案 0 :(得分:32)

one()函数有第二个参数接受一个id,例如.one('users', 1)

  • one('users', 1).get()转换为/users/1
  • all('users').getList()转换为/users

all()不同,one()通常不与.getList()一起使用而不带参数。但是,如果您拨打.one('users', 1).getList('emails').one('users', 1).all('emails').getList(),则会向/users/1/emails发出GET请求。

答案 1 :(得分:8)

我的猜测是他们在那里表达了你打算做什么的意图。我会理解这些是构建网址的一种方式,表达您是访问整个资源还是特定资源。

最后,他们将构建并执行GET请求但是因为您执行GET并检索某些数据并不意味着它应该以这种方式使用。

https://github.com/mgonto/restangular/issues/450

中提取的示例
  

getList可以双向调用。如果在元素1中调用它,   那么它需要一个子元素才能到达Collection。否则,它   获取集合。所以以下是相同的:

Restangular.one('places', 123).getList('venues')        // GET /places/123/venues
Restangular.one('places', 123).all('venues').getList()  // GET /places/123/venues

正如你所看到的,打电话给一个('places',123).all('场地')以表明你只想要位于区域/地点123的场地更具表现力。

也许以下网址会对您有所帮助:

https://github.com/mgonto/restangular/issues/450

答案 2 :(得分:0)

我最近发现了这些方法之间的差异。是的,他们两个都提出相同的请求,但你得到的结果可能会让你感到惊讶(因为他们让我感到惊讶)。

假设我们有一个API方法/用户,它们不严格地返回一个数组,但是像这样:

{
   "result": [{...}]
}

因此,数组作为响应对象的某个prop的值返回。在这种情况下,get()和getList()的工作方式不同。这段代码效果很好:

Restangular.get('users').then(function (response) {...});

收到响应后,将调用您的响应处理程序。但是这段代码似乎不起作用:

Restangular.all('users').getList().then(function (response) {...});

尽管请求已完成,状态代码为200且非空响应,但未调用响应处理程序。浏览器控制台不显示任何错误,网络监视器显示成功请求。

我已经使用 Restangular 1.5.2 对此进行了测试,因此可能已在较新版本中修复此问题。