繁体   English   中英

访问由AngularJS中的$ resource工厂服务创建的$ scope元素的属性

[英]Accessing attributes of $scope elements created by $resource factory service in AngularJS

我希望能够访问通过$ resource工厂服务(REST API)创建的对象的属性。

services.js:

myApp.factory('userService', ['$resource', 'backendUrl', function($resource, backendUrl) {
  return $resource(backendUrl + '/api/users/:region/:name',
    {region: '@region', name: '@name'}
  );
}]);

controllers.js:

$scope.userInfo = userService.get({region: $routeParams.region, name: $routeParams.name});

在controllers.js中,当通过console.log($scope.userInfo)显示时, userInfo包含多个属性,但是我无法使用点或括号表示法访问这些属性。

console.log($scope.userInfo)示例输出:

Resource {$promise: Object, $resolved: false, $get: function, $save: function, $query: function…}
$promise: Object
$resolved: true
id: 185
last_update: "2014-08-13T08:56:19.546"
name: "test_user"
region: "na"

尽管获得了以上输出,但是我无法访问,例如$scope.userInfo.name 当发送到控制台时,它打印undefined 我需要userInfo一些数据来向同一API发出进一步的请求。

我是否缺少作为资源类型对象的特殊之处?

资源的get方法是一个异步调用。 您可以在后端响应后访问属性。

您可以使用$ resolved属性对其进行测试。

$scope.userInfo = userService.get({region: $routeParams.region, name: $routeParams.name});
console.log($scope.userInfo.$resolved)

将始终打印为false。

要在值准备好后访问值,可以通过两种方式使用资源的$ promise回调:

$scope.userInfo = userService.get({region: $routeParams.region, name: $routeParams.name}, function(userInfo) {
    console.log(userInfo.name);
    console.log($scope.userInfo.name); // will print the same
});

要么:

$scope.userInfo = userService.get({region: $routeParams.region, name: $routeParams.name});
$scope.userInfo.$promise.then(function(userInfo) {
    console.log(userInfo == $scope.userInfo); // true
});

您也可以使用resource。$ promise.reject回调处理错误情况。 详情请参阅https://docs.angularjs.org/api/ngResource/service/ $ resource

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM