【问题标题】:What is the difference between .all() and .one() in Restangular?Restangular 中的 .all() 和 .one() 有什么区别?
【发布时间】:2014-03-20 11:22:40
【问题描述】:

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

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

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

我知道您可以执行 one('users', 123) 并且它会检索 /users/123 但如果没有第二个参数,它似乎是同一件事。在这种情况下,为什么不只使用一种方法?

【问题讨论】:

    标签: angularjs restangular


    【解决方案1】:

    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 请求。

    【讨论】:

      【解决方案2】:

      我的猜测是,它们的存在是为了表达你将要做什么的意图。我会将这些理解为构建 url 的一种方式,表示您是访问整个资源还是访问特定资源。

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

      示例摘自https://github.com/mgonto/restangular/issues/450

      getList 可以两种方式调用。如果在元素一中调用它, 那么它需要一个子元素才能到达一个集合。否则,它 获取集合。所以下面是一样的:

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

      如您所见,调用 one('places', 123).all('venues') 来理解您只想要位于区域/地点 123 中的场地更具表现力。

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

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

      【讨论】:

        【解决方案3】:

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

        假设我们有一个 API 方法 /users,它返回的不是严格的数组,而是这样的:

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

        因此,一个数组作为响应对象的某个属性的值返回。在这种情况下,get() 和 getList() 的工作方式不同。此代码运行良好:

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

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

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

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

        我已经用 Restangular 1.5.2 对此进行了测试,所以这可能已经在较新的版本中得到修复。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2017-09-07
          • 2015-05-23
          • 1970-01-01
          • 1970-01-01
          • 2018-02-18
          • 2021-04-15
          • 2021-07-25
          • 2019-12-21
          相关资源
          最近更新 更多