【问题标题】:Best practices for $resources bound directly on scope [closed]直接绑定在范围内的 $resources 的最佳实践 [关闭]
【发布时间】:2015-01-26 07:59:12
【问题描述】:

在使用资源时,我们可以像这样直接在 $scope 上绑定它们:

$scope.users = Users.$query();

这也可以写成:

Users.$query().$promise.then(function(users) {
     $scope.users = users;
});

您是否遇到过使用第一种方法的任何缺点?各有什么优缺点?

【问题讨论】:

    标签: angularjs promise angular-resource


    【解决方案1】:

    来自角度ng-book

    $resource 实例是异步的

    对于所有这些方法,重要的是要注意,当它们 调用时,$resource 对象立即返回一个空引用 到数据。此数据是一个空引用,而不是实际数据,因为 所有这些方法都是异步执行的。因此,调用 获取实例可能看起来是同步的,但实际上并非如此。实际上, 它只是对 Angular 将填写的数据的引用 当它从服务器返回时自动。

    // $scope.users will be empty
    $scope.users = User.query();
    

    我们可以使用方法的回调方法等待数据按预期返回 提供:

    $scope.users(function(users) {
       // logic here
    });
    

    或使用来自$promise 属性的原始$http

    $scope.users.$promise.then(function(users) {
        // logic here
    });
    

    【讨论】:

      【解决方案2】:

      这两种方法本质上是等效的。

      它们之间的主要区别在于,在第二种方法中,您将能够在请求完成后执行某些操作,而在第一种方法中,为了能够在请求完成时运行逻辑,您需要使用用户变量上的 $watch 语句。

      然而,第一种方法允许您在用户内部放置默认值,这在请求完成之前绑定视图时会很方便。

      顺便说一句,还有第三种选择:

      $scope.users = Users.$query();
      $scope.users.$promise.then(function(users) {
           // perform some logic
      });
      

      这使您可以立即将视图绑定到范围内的用户变量,同时在请求完成后执行您可能需要的任何其他逻辑。

      【讨论】:

      • 这个,也比较喜欢写一行:$scope.users = Users.query(function(result) {}, function(error) {})
      猜你喜欢
      • 2017-07-26
      • 1970-01-01
      • 1970-01-01
      • 2013-02-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-10
      • 1970-01-01
      相关资源
      最近更新 更多