$资源的最佳实践直接绑定在范围上

时间:2014-11-27 16:43:09

标签: angularjs promise angular-resource

在使用资源时,我们可以将它们直接绑定在$ scope上,如下所示:

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

这也可以写成:

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

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

2 个答案:

答案 0 :(得分:1)

来自有角度的 ng-book

$ resource 实例是异步的

  

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

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

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

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

或使用$http属性

中的原始$promise
$scope.users.$promise.then(function(users) {
    // logic here
});

答案 1 :(得分:0)

两种方法基本相同。

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

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

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

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

这允许您立即将视图绑定到作用域中的users变量,同时执行请求完成后可能需要的任何其他逻辑。