【问题标题】:AngularJS - How can I use the data retrieved using a Factory GET request in my controller?AngularJS - 如何在我的控制器中使用通过 Factory GET 请求检索到的数据?
【发布时间】:2015-10-08 22:47:37
【问题描述】:

我创建了一个 Angular 工厂来获取 JSON 数据。我正在使用$resourceget 方法从服务器检索此JSON 对象。对象本身包含子对象。

我一直在尝试在控制器中使用通过该工厂检索到的数据,但是当我调用 $scope 变量时,我得到了一些变化

无法读取未定义的属性 propertyName。

当我将它记录到控制台时,我可以读取该属性,所以我不明白它为什么会消失。为了诊断它,我尝试通过引用传递另一个变量。

问题是我可以通过登录控制台找到对象及其键。问题是当我尝试使用这些数据时,对象键变为undefined。我不知道为什么会这样。

 NewOrder.get({"id": $stateParams.loopId, "orderId": $stateParams.orderId}).$promise.then(function(order) {
    $scope.myData = order["data"];
    console.log("this is an order", order);
});

这是我的工厂

angular.module('myApp')
    .factory('NewOrder', function($resource) {
        return $resource('/api/loops/:id/orders/:orderId');
    });

我发现如果我创建一个新变量并将其设置为等于myData 的值,我的键中的对象就会消失。

这行得通

$scope.getOrder = function() {
    console.log($scope.myData);
}
=> Object {recruitingLeague: "NAHL", playerPosition: "LeftDefense", playerDOB: Object, playerHeight: Object, playerWeight: Object…}

创建一个新变量并通过引用传递前一个变量的值(用于诊断目的)不会。

$scope.newData = $scope.myData;

$scope.getOrder = function() {
    console.log($scope.newData);
}
=> undefined

我不明白为什么我从服务器检索的对象突然消失了。

【问题讨论】:

    标签: javascript angularjs undefined factory ngresource


    【解决方案1】:

    服务是异步的,所以$scope.myData不存在时

    $scope.newData = $scope.myData;
    

    发生,但当它已经存在时

    $scope.getOrder = function() {
        console.log($scope.myData);
    }
    

    被调用。

    【讨论】:

    • 所以我不能使用我异步加载的数据?那我怎样才能在我的控制器中使用 JSON 数据而不会在我调用它时消失呢?
    • myData 不会消失。当您将它分配给另一个变量时,它仍然是undefined。与观察者一起使用。 $scope.$watch( 'myData', function (newVal) { if (!newVal) return; /* use $scope.myData) here */ }。但是你已经有了promise链,所以你可以在then中操作数据,这是数据已经存在的时刻。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-13
    • 2013-04-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多