簡體   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