Angularjs 如何从返回承诺的服务中正确设置$scope属性?
当必须从某个服务检索属性时,我正在尝试找出在控制器的$scope中设置属性的正确方法。通常,我按如下方式分配范围变量:Angularjs 如何从返回承诺的服务中正确设置$scope属性?,angularjs,angularjs-scope,angular-promise,Angularjs,Angularjs Scope,Angular Promise,当必须从某个服务检索属性时,我正在尝试找出在控制器的$scope中设置属性的正确方法。通常,我按如下方式分配范围变量: $scope.firstName = 'John'; $scope.lastName = 'Doe'; 那么,当我想从某个服务方法中检索属性值时,如何执行相同的操作呢 以下是我的工厂服务方法: var getUserDetails = function () { return $q.when($resource('/api/v1/common/userdetails'
$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;
});
更不用说上面会返回一个承诺,而不仅仅是我想要的纯用户数据结果。我觉得好像我没有适当地使用承诺、服务或从控制器中的服务分配范围值
有人能告诉我这是否正确,如果不正确,请说明正确的方法吗?与答案相反,$resource仍然会做您期望的事情-虽然已从承诺中删除自动展开,但它仍然可以使用
$resource
。问题是,在调用$q.when
时,您显式地将它包装在一个常规的$q承诺中。相反,要:
var getUserDetails = function () {
return $resource('/api/v1/common/userdetails').get(); // no $q.when
};
你会得到你期望的行为:
$scope.userDetails = commonService.getUserDetails(); // will work.
尽管就个人而言,我喜欢明确的表示法,它不会掩盖http请求正在变得更好的事实。这就是承诺的工作原理,如果您使用路由器,您可能不想使用resolve,这取决于您的情况/用例。。。这完全取决于应用程序/页面的工作方式