无法在JSON中引用元素

时间:2014-04-07 13:41:47

标签: javascript json angularjs

我在AngularJS控制器中工作,试图获取当前月份的名称,这是我的代码:

$scope.months = {};
        $scope.currentMonth = new Date().getMonth() + 1;
        $http.get("json/months.json").success(function (data) {
            $scope.months = data;
        });
        console.log($scope.months);
        $scope.currentMonthName = $scope.months[0].name;
//Rest of file

这是我的JSON文件:

[
    {"id": "0", "name": "January" },
    {"id": "1", "name": "February"},
    {"id": "2", "name": "March"},
    {"id": "3", "name": "April"},
    {"id": "4", "name": "May"},
    {"id": "5", "name": "June"},
    {"id": "6", "name": "July"},
    {"id": "7", "name": "August"},
    {"id": "8", "name": "September"},
    {"id": "9", "name": "October"},
    {"id": "10", "name": "November"},
    {"id": "11", "name": "December"}
]

但是我的$ scope.currentMonth抛出了一个错误'TypeError:无法读取属性'name'of undefined'。我对此的看法是他甚至没有正确地检索JSON文件(未定义),但是在将此文件记录到控制台之后我可以看到他确实正确地检索了它,这让我想知道我做错了什么?

2 个答案:

答案 0 :(得分:2)

$http查询是异步的。

所以试试这个(你需要在查询回调中设置赋值):

$scope.months = {};
$scope.currentMonth = new Date().getMonth() + 1;
$http.get("json/months.json").success(function (data) {
   $scope.months = data;
   console.log($scope.months);
   $scope.currentMonthName = $scope.months[0].name;
});

答案 1 :(得分:1)

我认为您在使用它之前需要解析它。

$http.get("json/months.json").success(function (data) {
            data = JSON.parse(data);
            $scope.months = data;
});

JSON只是一个字符串。使用JSON.parse("json")将其转换为实际对象。