如何从 return 承诺的服务中正确设置 $scope 属性?
How do I properly set $scope properties from services that return a promise?
当必须从某些服务检索这些属性时,我正在尝试找出在我的控制器的 $scope 中设置属性的正确方法。通常我按如下方式分配范围变量:
$scope.firstName = 'John';
$scope.lastName = 'Doe';
那么当我想从某些服务方法中检索 属性 值时如何执行相同的操作?
这是我的工厂服务方式:
var getUserDetails = function () {
return $q.when($resource('/api/v1/common/userdetails').get());
};
我想在我的控制器的 $scope 中分配用户详细信息,如下所示:
$scope.userDetails = commonService.getUserDetails();
但是,那是行不通的。我最终不得不做这样的事情,感觉很不自然:
commonService.getUserDetails().then(function (user) {
$scope.user = user;
});
更何况上面会return一个承诺,不仅仅是我想要的纯用户数据结果。我觉得好像我没有在我的控制器中适当地使用承诺、服务或从服务分配范围值。
有人可以告诉我这是否正确吗?如果不正确,请告诉我正确的方法?
与答案相反,$resource 仍然按照您的预期进行 - 尽管从承诺中删除了自动解包,但它仍然适用于 $resource
。问题是当您调用 $q.when
时,您明确地将其包装在一个常规的 $q promise 中。相反,做:
var getUserDetails = function () {
return $resource('/api/v1/common/userdetails').get(); // no $q.when
};
您将获得预期的行为:
$scope.userDetails = commonService.getUserDetails(); // will work.
虽然就个人而言 - 我喜欢明确的表示法,它不会隐藏 HTTP 请求变得更好的事实。
当必须从某些服务检索这些属性时,我正在尝试找出在我的控制器的 $scope 中设置属性的正确方法。通常我按如下方式分配范围变量:
$scope.firstName = 'John';
$scope.lastName = 'Doe';
那么当我想从某些服务方法中检索 属性 值时如何执行相同的操作?
这是我的工厂服务方式:
var getUserDetails = function () {
return $q.when($resource('/api/v1/common/userdetails').get());
};
我想在我的控制器的 $scope 中分配用户详细信息,如下所示:
$scope.userDetails = commonService.getUserDetails();
但是,那是行不通的。我最终不得不做这样的事情,感觉很不自然:
commonService.getUserDetails().then(function (user) {
$scope.user = user;
});
更何况上面会return一个承诺,不仅仅是我想要的纯用户数据结果。我觉得好像我没有在我的控制器中适当地使用承诺、服务或从服务分配范围值。
有人可以告诉我这是否正确吗?如果不正确,请告诉我正确的方法?
与答案相反,$resource 仍然按照您的预期进行 - 尽管从承诺中删除了自动解包,但它仍然适用于 $resource
。问题是当您调用 $q.when
时,您明确地将其包装在一个常规的 $q promise 中。相反,做:
var getUserDetails = function () {
return $resource('/api/v1/common/userdetails').get(); // no $q.when
};
您将获得预期的行为:
$scope.userDetails = commonService.getUserDetails(); // will work.
虽然就个人而言 - 我喜欢明确的表示法,它不会隐藏 HTTP 请求变得更好的事实。