如何从返回承诺的服务中正确设置$ scope属性?

时间:2015-02-28 19:01:27

标签: angularjs angularjs-scope angular-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;
});

更不用说上面的内容将返回一个承诺,而不仅仅是我想要的纯用户数据结果。我觉得好像我没有使用承诺,服务或者从我的控制器中的服务中适当地分配范围值。

有人可以告诉我这是否正确,如果没有,请说明正确的方法吗?

1 个答案:

答案 0 :(得分:1)

与答案相反,$资源仍然按照您的预期执行 - 尽管从承诺中删除了自动展开功能,但它仍适用于$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请求变得更好的事实。