当我必须从某些服务中检索这些属性时,我试图找出在我的控制器的$ 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;
});
更不用说上面的内容将返回一个承诺,而不仅仅是我想要的纯用户数据结果。我觉得好像我没有使用承诺,服务或者从我的控制器中的服务中适当地分配范围值。
有人可以告诉我这是否正确,如果没有,请说明正确的方法吗?
答案 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请求变得更好的事实。