如何访问angularjs中的深度嵌套json对象
在这里,我想从第一页的Json数据中访问顶级市场详细信息,虽然我无法访问次级市场详细信息,但我能够访问。我想在下一页显示次级市场名称如何访问angularjs中的深度嵌套json对象,angularjs,json,Angularjs,Json,在这里,我想从第一页的Json数据中访问顶级市场详细信息,虽然我无法访问次级市场详细信息,但我能够访问。我想在下一页显示次级市场名称 $scope.myData = { "market": [{ "mid": 3, "mname": "mark1", "submarket": [{ "id": 20, "name": "val1" }, { "id": 24, "name": "val2", "sub
$scope.myData = {
"market": [{
"mid": 3,
"mname": "mark1",
"submarket": [{
"id": 20,
"name": "val1"
}, {
"id": 24,
"name": "val2",
"submarket": [{
"id": 26,
"name": "val21"
}]
}]
"market": [{
"mid": 4,
"name": "mark1.1",
"submarket": [{....
}]
}]
}, {
"mid": 6,
"mname": "mark2",
}]
};
$scope.markname = []; /*stores top level markets*/
angular.forEach($scope.myData.market, function(org) {
$scope.markname.push(org)
}) /*works fine and has the details of market (mid:3 and mid:6)*/
$scope.submark = [];
angular.forEach($scope.markname.submarket, function(sorg) {
$scope.submark.push(sorg)
}) /*doesn't store anything*/
应该是:
$scope.submark = [];
angular.forEach($scope.markname, function(sorg) {
angular.forEach(sorg.submarket, function(subsorg) {
$scope.submark.push(subsorg)
});
});
应该是:
$scope.submark = [];
angular.forEach($scope.markname, function(sorg) {
angular.forEach(sorg.submarket, function(subsorg) {
$scope.submark.push(subsorg)
});
});
$scope.markname
是一个数组,您在第一次forEach
时将项目推入其中,但在第二次尝试访问属性子市场。这在markname
数组中不存在,它存在于数组中的每个项上
我使用原生的forEach
完成了我的示例,这里根本不需要angular参与,它还隐藏了未定义的问题,因为原生的数组原型是可用的,如果您尝试将其称为未定义的
,angular会抛出异常,而angular愉快地接受未定义的
,并继续
因此,一个简单的解决方法是
markname.forEach(function(sorg) {
if (sorg.hasOwnProperty('submarket')) {
submark.push(sorg.submarket);
}
});
参见小提琴:
编辑:值得注意的是,这将生成一个多维数组,如果不需要,您可以使用如下内容将它们全部合并:
submark.push.apply(submark, sorg.submarket);
$scope.markname
是一个数组,您在第一次forEach
中将项目推入其中,但在第二次尝试访问属性子市场
。这在markname
数组中不存在,它存在于数组中的每个项上
我使用原生的forEach
完成了我的示例,这里根本不需要angular参与,它还隐藏了未定义的问题,因为原生的数组原型是可用的,如果您尝试将其称为未定义的
,angular会抛出异常,而angular愉快地接受未定义的
,并继续
因此,一个简单的解决方法是
markname.forEach(function(sorg) {
if (sorg.hasOwnProperty('submarket')) {
submark.push(sorg.submarket);
}
});
参见小提琴:
编辑:值得注意的是,这将生成一个多维数组,如果不需要,您可以使用如下内容将它们全部合并:
submark.push.apply(submark, sorg.submarket);
您共享的json数据不正确。请检查一下
HTML:
<div ng-app="app" ng-controller="test">
</div>
var app = angular.module('app', []);
app.controller('test', function ($scope) {
$scope.myData = {
"market": [{
"mid": 3,
"mname": "mark1",
"submarket": [{
"id": 20,
"name": "val1"
}, {
"id": 24,
"name": "val2",
"submarket": [{
"id": 26,
"name": "val21"
}]
}, {
"mid": 4,
"name": "mark1.1",
"submarket": [{
"id": 27,
"name": "val221"
}]
}]
}, {
"mid": 6,
"mname": "mark2",
}]
};
$scope.markname = []; /*stores top level markets*/
angular.forEach($scope.myData.market, function (org) {
$scope.markname.push(org)
}) /*works fine and has the details of market (mid:3 and mid:6)*/
console.log('markname', $scope.markname);
$scope.submark = [];
angular.forEach($scope.markname, function (sorg) {
angular.forEach(sorg.submarket, function (subM) {
$scope.submark.push(subM)
})
})
console.log('submark', $scope.submark);
});
您共享的json数据不正确。请检查一下
HTML:
<div ng-app="app" ng-controller="test">
</div>
var app = angular.module('app', []);
app.controller('test', function ($scope) {
$scope.myData = {
"market": [{
"mid": 3,
"mname": "mark1",
"submarket": [{
"id": 20,
"name": "val1"
}, {
"id": 24,
"name": "val2",
"submarket": [{
"id": 26,
"name": "val21"
}]
}, {
"mid": 4,
"name": "mark1.1",
"submarket": [{
"id": 27,
"name": "val221"
}]
}]
}, {
"mid": 6,
"mname": "mark2",
}]
};
$scope.markname = []; /*stores top level markets*/
angular.forEach($scope.myData.market, function (org) {
$scope.markname.push(org)
}) /*works fine and has the details of market (mid:3 and mid:6)*/
console.log('markname', $scope.markname);
$scope.submark = [];
angular.forEach($scope.markname, function (sorg) {
angular.forEach(sorg.submarket, function (subM) {
$scope.submark.push(subM)
})
})
console.log('submark', $scope.submark);
});
markname
是一个数组,它没有要迭代的属性submarket
,如果使用本机forEach
而不是angularsforEach
,这一点也会更加明显。Angulars版本处理未定义的传递,而如果调用未定义对象,则本机将不起作用,您将得到一个类型错误。基本清除!谢谢markname
是一个数组,它没有要迭代的属性submarket
,如果使用本机forEach
而不是angularsforEach
,这一点也会更加明显。Angulars版本处理未定义的传递,而如果调用未定义对象,则本机将不起作用,您将得到一个类型错误。基本清除!谢谢这1个有效。谢谢但问题是,这个数组将存储所有主要市场的次级市场的详细信息。我想做的是只显示我选择要查看的市场的子市场(在指数中,所有顶级市场名称都列为选项)。什么能帮助我实现这一点?在HTML代码中使用ng repeat
和ng show
获取完整的myData。市场阵列或控制器中的阵列,或使用视图中带有角度的ng repeat
。这1起作用。谢谢但问题是,这个数组将存储所有主要市场的次级市场的详细信息。我想做的是只显示我选择要查看的市场的子市场(在指数中,所有顶级市场名称都列为选项)。什么能帮助我实现这一点?在HTML代码中使用ng repeat
和ng show
获取完整的myData.market
阵列或控制器中的阵列,或使用视图中带有角度的ng repeat
。