Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
访问AngularJS控制器中的嵌套JSON对象_Json_Angularjs_Object_Controller - Fatal编程技术网

访问AngularJS控制器中的嵌套JSON对象

访问AngularJS控制器中的嵌套JSON对象,json,angularjs,object,controller,Json,Angularjs,Object,Controller,我是AngularJS新手,正在尝试为曲目创建$scope,以供以后使用 data.json(示例): 控制器 app.controller('lyricsCtrl', function($scope, $http) { $http.get('data.json') .then(function(result) { $scope.albums = result.data; $scope.tracks = result.data.tracks;

我是AngularJS新手,正在尝试为
曲目创建
$scope
,以供以后使用

data.json(示例):

控制器

app.controller('lyricsCtrl', function($scope, $http) {
$http.get('data.json')
    .then(function(result) {
        $scope.albums = result.data;
        $scope.tracks = result.data.tracks;

        console.log($scope.tracks);  //Undefined...
    });
});

为什么
$scope.tracks
未定义?

result.data是一个数组,所以您必须使用index来访问它的子级,如:-

$scope.tracks = result.data[0].tracks;

如果您的json文件是原样的:

[
    {
        "album": "Album name",
        "tracks": [
            {
                "id": "1",
                "title": "songtitle1",
                "lyric": "lyrics1"
            },
            {
                "id": "2",
                "title": "songtitle2",
                "lyric": "lyrics2"
            }
        ]
    }
]
我们的答复如下:

data: Array[1]
    0: Object
        album: "Album name"
        tracks: Array[2]
由于
数据
以数组的形式返回,您可以像处理任何其他javascript数组一样通过索引进行访问,因此您可以执行循环,或者如果您知道只返回一个结果,则可以使用零索引:

$http.get('data.json').then(function(result) {
    console.log(result);
    // Assign variables
    $scope.album = result.data[0].album;
    $scope.tracks = result.data[0].tracks;
    for (var i = 0, l = $scope.tracks.length; i < l; i++) {
        console.log($scope.tracks[i].title);
    }
});
$http.get('data.json')。然后(函数(结果){
控制台日志(结果);
//分配变量
$scope.album=result.data[0].album;
$scope.tracks=result.data[0]。跟踪;
对于(var i=0,l=$scope.tracks.length;i
它应该是result.data[0]。跟踪数据是一个数组


$scope.tracks=result.data[0]。跟踪

看起来您的
数据
是一个包含
曲目
相册
的对象数组。因此,类似的内容适用于您的示例:
result.data[0]。跟踪
$http
中返回
respose
对象。然后
函数和
响应。data
是实际数据-即上面的顶级数组对象。@NewDev您完全正确,我误读了,认为OP使用了
.success
。我的错误,我会更正。出于某种原因,使用“[0]”会实时(而不是本地)抛出错误,
TypeError:无法读取未定义的属性“id”
$http.get('data.json').then(function(result) {
    console.log(result);
    // Assign variables
    $scope.album = result.data[0].album;
    $scope.tracks = result.data[0].tracks;
    for (var i = 0, l = $scope.tracks.length; i < l; i++) {
        console.log($scope.tracks[i].title);
    }
});