将多维JSON键值对转换为Angular菜单(不需要Angular知识)
Converting Multidimensional JSON key-value pairs into an Angular Menu (no Angular knowledge required)
我在这里问了这个问题:
在JSON中使用动态多维键值对
但是它变得更复杂了,我无法从这个答案中找到我要去的地方。如果我有一个这样的数据对象:
{
"email": "user@someco.com",
"firstname": "Bob",
"lastname": "Smith",
"company": "ACME",
"custom": {
"services": [
{
"name": "svc1",
"desc": "abcdefg",
"selected": "true",
"status": "None"
},
{
"name": "svc2",
"desc": "abcdefg",
"selected": "true",
"status": "None"
},
{
"name": "svc3",
"desc": "abcdefg",
"selected": "false",
"status": "None"
},
{
"name": "svc4",
"desc": "abcdefg",
"selected": "false",
"status": "None"
}
],
"fields": [
{
"name": "Products",
"desc": "abcdef",
"type": "multi",
"values": [
{
"name": "Product1",
"desc": "abcdef"
},
{
"name": "Product2",
"desc": "abcdef"
}
],
"services": [
"svc1",
"svc2",
"svc3"
]
},
{
"name": "Wines",
"desc": "abcdef",
"type": "multi",
"values": [
{
"name": "Wine 1",
"desc": "abcdef"
}
],
"services": [
"svc4"
]
},
{
"name": "Fruits",
"desc": "abcdef",
"type": "multi",
"values": [
{
"name": "Fruit 1",
"desc": "abcdef"
},
{
"name": "Fruit 2",
"desc": "abcdef"
}
],
"services": [
"svc4"
]
}
]
}
};
我怎么把它转换成Angular菜单?菜单需要列出所有服务,然后如果服务在"fields"中有关联项,则该项应列在其下方。因此,例如"svc1"和它的描述应该列在一行(得到了工作),但是"Product1"answers"Product2"及其描述应该出现在下两行,因为您可以看到"svc1"列在"产品"的"服务"字段中。类似地,"svc4"应该出现在一行,然后"Wines"及其描述应该出现在下一行,因为"svc4"出现在"Wines"的"services"字段中。"
我认为最好的方法是在Angular控制器中按顺序解包和重新打包这个JSON对象,然后将这些数据推送到Angular视图中,但也可能有一个解决方案,只使用视图中可用的逻辑。我已经尝试了一堆嵌套的for和if沿着这些行(非常不工作):
var i, j;
var listArray = [];
for (i = 0; i < $scope.svcs.length; i++) {
var littleArray = [$scope.svcs[i].status, $scope.svcs[i].name, $scope.svcs.desc];
listArray.push[littleArray1];
for (j=0; j < $scope.jFA.length; j++) {
if ($scope.jFA[j] == $scope.svcs[i].name) {
if ($scope.jFA[j] == $scope.svcs[i].fields)
littleArray = [$scope.jFA[j].fields] //...etc
}
}
…但是这个逻辑变得越来越复杂,不管我现在怎么用它,它都不起作用。我喜欢另一个问题的简单答案,但没有成功地复制它。
所以如果有人能帮我弄清楚如何使用JS将数据转换成正确的序列,我可以处理Angular部分。或者,如果你是一个Angular高手,并且有这些问题的答案,那就更好了。
所以理解你的问题有点困难,但我已经尽力了。这个小提琴是否显示了你想要达到的目标? http://jsfiddle.net/arknr6qz/1/
JS:
var app = angular.module('TestApp',[]);
app.controller('TestController', function($scope)
{
$scope.checkService = function(service, fieldServices)
{
if (fieldServices.indexOf(service) != -1) return true;
return false;
};
$scope.data = {
"email": "user@someco.com",
"firstname": "Bob",
"lastname": "Smith",
"company": "ACME",
"custom": {
"services": [
{
"name": "svc1",
"desc": "abcdefg",
"selected": "true",
"status": "None"
},
{
"name": "svc2",
"desc": "abcdefg",
"selected": "true",
"status": "None"
},
{
"name": "svc3",
"desc": "abcdefg",
"selected": "false",
"status": "None"
},
{
"name": "svc4",
"desc": "abcdefg",
"selected": "false",
"status": "None"
}
],
"fields": [
{
"name": "Products",
"desc": "abcdef",
"type": "multi",
"values": [
{
"name": "Product1",
"desc": "abcdef"
},
{
"name": "Product2",
"desc": "abcdef"
}
],
"services": [
"svc1",
"svc2",
"svc3"
]
},
{
"name": "Wines",
"desc": "abcdef",
"type": "multi",
"values": [
{
"name": "Wine 1",
"desc": "abcdef"
}
],
"services": [
"svc4"
]
},
{
"name": "Fruits",
"desc": "abcdef",
"type": "multi",
"values": [
{
"name": "Fruit 1",
"desc": "abcdef"
},
{
"name": "Fruit 2",
"desc": "abcdef"
}
],
"services": [
"svc4"
]
}
]
}
};
});
HTML: <div ng-app="TestApp">
<div ng-controller="TestController">
<div ng-repeat="service in data.custom.services">
{{ service.name }}
<div class="indent" ng-repeat="fields in data.custom.fields">
<span ng-if="checkService(service.name, fields.services)">
{{fields.services.values}}
<span ng-repeat="value in fields.values">
{{value.name}} - {{value.desc}}<br>
</span>
</span>
</div>
</div>
</div>
</div>
最后css:
.indent {
margin-left:10px;
}
相关文章:
- angular的下拉菜单
- 如何为Angular Material's”;md菜单”;
- 有没有一种方法可以基于Angular 2中注册的路线构建动态导航/菜单
- Angular Js弹出菜单
- 在Typescript中对array/JONS进行迭代,以构建带有子菜单的Angular 2模板菜单
- Angular Bootstrap 3导航栏子菜单不会启动
- 多菜单级别 Angular js
- Angular的反应式下拉菜单
- 更改Angular js中导航菜单的类
- 无法在angular js中使用下拉菜单更改颜色
- 使用Angular和Codeigniter根据会话值更改菜单
- 在下拉菜单中的angular应用程序中显示JSON数据
- 删除Ionic/Angular JS中基于侧菜单的模板中的导航栏
- 使用Angular.js和UI Router突出显示菜单时出现意外类
- 如何从下拉菜单Angular加载模板
- Angular没有't在下拉菜单中显示选项的正确文本
- 带下拉菜单的Angular Pills
- Angular JS下拉菜单使用ng点击和ng显示来显示动态内容
- 将多维JSON键值对转换为Angular菜单(不需要Angular知识)
- DevExtreme和Angular -菜单小部件