我希望能够访问通过$ 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中,userInfo
在通过console.log($scope.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的进一步请求。
我是否遗漏了一些关于这是资源类型对象的特殊内容?
答案 0 :(得分:3)
资源' get方法是异步调用。您可以在后端响应后访问属性。
您可以使用$ resolved属性进行测试。
$scope.userInfo = userService.get({region: $routeParams.region, name: $routeParams.name});
console.log($scope.userInfo.$resolved)
将始终打印错误。
要在值准备好后访问值,可以通过两种方式使用资源的$ 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
});
您还可以使用资源处理错误条件。$ promise.reject回调。 请参阅https://docs.angularjs.org/api/ngResource/service/ $ resource
了解更多信息