AngularJS - 如何在控制器中使用Factory GET请求检索的数据?

时间:2015-07-19 21:01:27

标签: javascript angularjs undefined factory ngresource

我创建了一个用于获取JSON数据的Angular工厂。我使用$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

我无法理解为什么我从服务器检索的对象突然消失。

1 个答案:

答案 0 :(得分:2)

该服务是异步的,因此

$scope.newData = $scope.myData; 不存在
$scope.getOrder = function() {
    console.log($scope.myData);
}
发生

,但

时已经存在了
<table id="table1">
    <colgroup><col><col><col><col></colgroup>    
    <tr><th class="green">th1</th><th>th2</th><th>th3</th><th>th4</th> </tr>
    <tr><td class="green">Cell1</td><td>Cell2</td><td>Cell3</td><td>Cell4</td></tr>
    <tr><td class="green">Cell1</td><td>Cell2</td><td>Cell3</td><td>Cell4</td></tr>
    <tr><td class="green">Cell1</td><td>Cell2</td><td>Cell3</td><td>Cell4</td></tr>
    <tr><td class="green">Cell1</td><td>Cell2</td><td>Cell3</td><td>Cell4</td></tr>
</table>

被召唤。