Угловой сбор данных лучшая практика
У меня есть таблица данных, которая представляет некоторую информацию об авторизации пользователя. Во главе таблицы находятся такие типы действий, как:
Insert
Update
Select
Delete
Approve
Full Control
Deny
В левой части таблицы есть названия для типов действий. Например, когда пользователь нажимает "Вставить и обновить" в первой строке, которая представляет собой (Организация) новый массив, заполняется.
Я хочу спросить: есть ли лучший способ добиться того же результата? Я думаю, что код выглядит грязно из-за использования вложенного angular.forEach
Заранее спасибо.
1 ответ
Попробуйте после выравнивания набора данных, а затем поработайте со сглаженным видом.
Следовательно, окончательные результаты заканчиваются структурой, подобной следующей:
[
{
"name": "Organization",
"actions": [
{
"action": "Insert",
"checked": true
},
{
"action": "Update",
"checked": false
},
{
"action": "Select",
"checked": false
},
{
"action": "Delete",
"checked": false
},
{
"action": "Approve",
"checked": false
},
{
"action": "Full Control",
"checked": false
},
{
"action": "Deny",
"checked": false
}
]
},
{
"name": "Company",
"actions": [
{
"action": "Insert",
"checked": false
},
{
"action": "Update",
"checked": false
},
{
"action": "Select",
"checked": false
},
{
"action": "Delete",
"checked": false
},
{
"action": "Approve",
"checked": false
},
{
"action": "Full Control",
"checked": true
},
{
"action": "Deny",
"checked": false
}
]
},
{
"name": "Department One",
"actions": [
{
"action": "Insert",
"checked": false
},
{
"action": "Update",
"checked": false
},
{
"action": "Select",
"checked": false
},
{
"action": "Delete",
"checked": false
},
{
"action": "Approve",
"checked": false
},
{
"action": "Full Control",
"checked": true
},
{
"action": "Deny",
"checked": false
}
]
},
{
"name": "Department Two",
"actions": [
{
"action": "Insert",
"checked": false
},
{
"action": "Update",
"checked": false
},
{
"action": "Select",
"checked": false
},
{
"action": "Delete",
"checked": false
},
{
"action": "Approve",
"checked": false
},
{
"action": "Full Control",
"checked": false
},
{
"action": "Deny",
"checked": false
}
]
}
]
Следующая функция была использована для выравнивания:
function flatten(arr) {
for (var k = 0, l = arr.length; k < l; k++) {
var obj = arr[k];
var rec = {};
rec.name = obj.name;
rec.actions = [];
obj.actions.forEach(function(act, idx) {
rec.actions.push({
action: action[idx].text,
checked: act.isChecked
});
});
vm.records.push(rec);
if (obj.childs && obj.childs.length) {
flatten(obj.childs);
}
}
}