这两者有什么区别?两者似乎都对/ 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但是没有第二个参数它似乎是同一个东西。为什么不在这种情况下只使用一种方法?
答案 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的场地更具表现力。
也许以下网址会对您有所帮助:
答案 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 对此进行了测试,因此可能已在较新版本中修复此问题。