使用Angular ng repeat访问第三级JSON
Accessing 3rd level of JSON with Angular ng-repeat
我正在使用Angular ng repeat提供的过滤器来嵌套json对象?以运行我的JSON。但是,我需要访问所有第三级元素,而不是像示例中那样访问第二级。
我的JSON看起来像:
[
{
"category": "colors",
"heading": "Colors & Background",
"indexes": [
{
"index": "colors",
"name": "Colors",
"patterns": [
{
"index": "background-patterns",
"name": "Background Patterns"
}
]
}
],
"order": "1"
},
{
"category": "typography",
"heading": "Typography",
"indexes": [
{
"index": "typography",
"name": "Typography",
"patterns": [
{
"index": "headings",
"name": "Headings"
},
{
"index": "plain-text",
"name": "Plain Text"
},
{
"index": "text-icon",
"name": "Text Icon"
}
]
}
],
"order": "2"
}
]
我的app.js看起来像:
var app = angular.module('mymod', []);
app.filter('createarray', function () {
return function (value, propertyName) {
var arrayList = [];
angular.forEach(value, function (val) {
angular.forEach(val[propertyName], function (v) {
arrayList.push(v)
});
});
console.log(arrayList)
return arrayList;
}
});
app.directive('everything', function() {
return {
restrict: 'E',
templateUrl: 'everything.html',
controller: function($scope, $http) {
$http.get('assets/js/test.json')
.then(function(result) {
$scope.everything = result.data;
});
},
controllerAs: 'everything'
}
});
我的HTML看起来像:
<nav class="om-nav-everything">
<ul>
<li ng-repeat="pattern in everything.indexes | createarray: 'patterns'"><a href="index-{{pattern.index}}.html">{{pattern.name}}</a></li>
</ul>
</nav>
我想做的是为每个模式都有一个列表项,因此是JSON中所有三级项的列表。
我该如何更改过滤器以实现这一点?
这是一个带有相关代码的Plunker:http://plnkr.co/edit/qY4yoBsGTjl9HsreivAN?p=info
所以我所做的是制作一个可以放入过滤器的函数,因为如果我做了所有的工作,有什么乐趣?这将采用一个属性名称数组,当它到达最后一个时,它将返回该值。下面是一个演示http://plnkr.co/edit/K6SJ8wo9q14YXvChxHuP?p=preview
var lastArray = function (arr, propertyNames, index) {
var res = [];
if (!Array.isArray(arr)) {
return res;
}
for (var i = 0; i < arr.length; i++) {
var val = arr[i][propertyNames[index]];
if (index !== propertyNames.length - 1) {
var x = index + 1;
res = res.concat(lastArray(val, propertyNames, x));
} else {
res = res.concat(val);
}
}
return res;
};
为了获得一些指导,我可能会尝试类似的东西:
<li ng-repeat="o in everything | createarray: 'indexes,patterns'"></li>
然后在createarray
过滤器中,将","上的字符串拆分,并将其发送到lastArray()
编辑:我确实制作了一个plunker来展示它的棱角。http://plnkr.co/edit/RsrIAz1Z3i0XFRV4Cj1g?p=preview
相关文章:
- 使用javascript或angularjs特定过滤器搜索字符串中第一个img标记的json值
- 如何创建具有第三级的垂直导航菜单
- AngularJS json.parse 在 json 数据的第 1 行第 1 列处意外的数据结尾
- Angular UI Router-在不了解第二级嵌套视图的情况下更改第三级嵌套视图
- NodeJS应用程序只显示第一个JSON对象.为什么?
- AngularJS 视图在使用 angular-ui-router 的第三级嵌套路由上不更新
- 如何在JS中解析流上的第一个JSON对象
- jQuery第三级导航未按预期工作
- jquery菜单ui.当第二级子菜单展开时,自动展开第三级子菜单
- 将第三级添加到CSS菜单
- 使用Angular ng repeat访问第三级JSON
- 循环访问第三级 JSON 对象
- HTML和JavaScript中的第三级引号转义
- 在jquery中显示第三级子菜单
- 如何添加第三级到我的css菜单出现/消失在悬停
- 第三级的CSS / Javascript菜单
- 测试正则表达式的第三级斜杠
- 第三级菜单的宽度
- 第二/第三级的firebase查询
- 使用jquery显示第三级ul菜单