Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angularjs 如何从返回承诺的服务中正确设置$scope属性?_Angularjs_Angularjs Scope_Angular Promise - Fatal编程技术网

Angularjs 如何从返回承诺的服务中正确设置$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中设置属性的正确方法。通常,我按如下方式分配范围变量:

$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,这取决于您的情况/用例。。。这完全取决于应用程序/页面的工作方式