【问题标题】:JSON Object is not resolved before Controller is instantiated在实例化控制器之前未解析 JSON 对象
【发布时间】:2017-01-31 11:10:34
【问题描述】:

我正在使用 Ionic 创建一个应用程序,并且在控制器中,我得到了一个从 app.js 解析的对象。这个对象有几个属性,包括一个像这样的数组:

{
    "objectId":"id",
    "objectName":"name",
    "anArray":[{
        "id":"id1",
        "name":"name1",
        "description":"Medium Rare",
        "photographUrl":"/image1"
    }, {
        "id":"id2",
        "name":"name2",
        "description":"Baked Beans on Scrumptious Dark Rye Bread",
        "photographUrl":"/image2"
    }],
    "emptyArray":[]
}

但是,问题是,我可以在 html 中使用 theObject.anArray 中的 (key, value) 遍历数组中的每个项目,但是在控制器中,我试图在 for 中遍历数组环形 for (var i = 0; i < $scope.theObject.anArray.length; i++) {...}

但是,我得到一个错误:

TypeError: 无法读取未定义的属性“长度”

谁能帮我弄清楚为什么我不能在控制器中访问这个数组,但我可以在 html 中访问。实际上,我无法访问控制器中对象的任何属性,看起来好像控制器是在使用“resolve”在 app.js 中解析对象之前实例化的,但是,我的印象是,这是'不应该发生,数据应该在控制器被实例化之前被解析

附:在控制器中我使用这个:

$scope.theObject = theObject;

谢谢

【问题讨论】:

  • 你能做 console.log($scope.theObject) 吗?
  • 只返回[object Object]
  • 我们能得到更多关于 $scope.theObject 的信息吗?它来自哪里?
  • console.log(JSON.stringify($scope.theObject)).. 检查对象的结构。查看密钥是否存在。
  • JSON.stringify() 返回 {}。密钥确实存在,并在 HTML 中使用 theObject.anArray 中的 ng-repeat="(key, value)从网络活动中看到。

标签: javascript angularjs arrays json ionic-framework


【解决方案1】:

好的,我已经解决了这个问题。 Resolve 在实例化控制器之前返回对象的承诺。但是,控制器在来自 web 调用的对象数据被放入该 promise 对象之前被实例化。所以解决方案是使用这条线在控制器内部进行网络调用

factory.theObject().get().$promise.then(function (response{
   $scope.theObject = response;
}

【讨论】:

    【解决方案2】:

    因为您没有JSON,所以您遇到了错误。你有一个数组:[]

    试试这个:

    var myApp = angular.module('myApp',[]);
    
    myApp.controller('MyCtrl',function($scope) {
        var theObject = [{
        "objectId":"id",
        "objectName":"name",
        "anArray":[{
            "id":"id1",
            "name":"name1",
            "description":"Medium Rare",
            "photographUrl":"/image1"
        }, {
            "id":"id2",
            "name":"name2",
            "description":"Baked Beans on Scrumptious Dark Rye Bread",
            "photographUrl":"/image2"
        }],
        "emptyArray":[]
    }];
    $scope.theObject = theObject;
    var arr = $scope.theObject[0].anArray;
    for (var i = 0; i < arr.length; i++) {
      console.log(arr[i]);
    }
    
    });
    <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
    <div ng-app="myApp" ng-controller="MyCtrl">
    </div>

    【讨论】:

    • 抱歉,这不起作用,我收到此错误:TypeError: Cannot convert undefined or null to object。传递的对象不是数组,而是具有数组作为其属性的对象。传递的对象来自 Rest Controller,所以我无法更改
    猜你喜欢
    • 2012-05-13
    • 2017-08-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多