Я работаю над Угловым приложением, которое использует cell modifier внутри custom cell template в Угловом бутстрапном календаре. Внутри каждой ячейки вместо стандартного события я помещаю набор таблиц, которые используются для регистрации на смену на станции в этот день. Таблицы разделены на две группы; am и pm, а в каждой группе am/pm есть таблица для каждой станции с тремя строками в каждой таблице.Организация объектов иерархически на два уровня в angularjs
AM
| 1 | Должность | Имя |
| | Pos 1 | Имя 1 |
| | Pos 2 | Имя 2 |
| | Поз 3 | Имя 3 |
| 2 | Должность | Имя |
| | Pos 1 | Имя 1 |
| | Pos 2 | Имя 2 |
| | Поз 3 | Имя 3 |
| 1 | Должность | Имя |
| | Pos 1 | Имя 1 |
| | Pos 2 | Имя 2 |
| | Поз 3 | Имя 3 |
| 2 | Должность | Имя |
| | Pos 1 | Имя 1 |
| | Pos 2 | Имя 2 |
| | Поз 3 | Имя 3 |
Внутри моей функции модификатора ячейки, я получаю массив объектов сдвига на этот день, и каждый объект сдвига содержит значение AMPM и значение станции:
{
"_id": "57776537ac0a88010063b9b9",
"modified": "2016-07-02T06:54:47.518Z",
"data": {
"station": "1",
"date": "2016-07-01T07:00:00.000Z",
"ampm": "pm",
"slots": [
{
"position": "AO",
"name": ""
},
{
"position": "FF",
"name": {
"_id": "57776507ac0a88010063b9b8",
"modified": "2016-07-02T06:53:59.661Z",
"data": {
"group": "suppression",
"driving": {
"n": false,
"d": true,
"ao": false,
"wt": false
},
"emtLevel": "b",
"secondaryPhoneNumber": "",
"primaryPhoneNumber": "5556781234",
"emailAddress": "[email protected]",
"fullName": "Person One",
"userName": "person.one",
"assignedStation": "18",
"probationary": false
},
"form": "57427ba554ec330100dad645",
"created": "2016-07-02T06:53:59.644Z",
"externalIds": [],
"access": [],
"roles": [
"573511a8ffaa7a0100a5718a"
],
"owner": "57776507ac0a88010063b9b8"
}
},
{
"position": "FF",
"name": {
"_id": "57439d856e67b40100d4c420",
"modified": "2016-05-24T00:17:09.493Z",
"data": {
"userName": "person.two",
"fullName": "Person Two",
"emailAddress": "[email protected]",
"primaryPhoneNumber": "5555556666",
"secondaryPhoneNumber": "",
"assignedStation": "",
"emtLevel": "b",
"driving": {
"d": true
},
"group": "suppression"
},
"form": "57427ba554ec330100dad645",
"created": "2016-05-24T00:17:09.474Z",
"externalIds": [],
"access": [],
"roles": [
"573511a8ffaa7a0100a5718a"
],
"owner": "5734bba2ffaa7a0100a57029"
}
}
]
},
Так что вопрос в том, как принять эти объекты и организовать их в две группы, упомянутые выше, чтобы я мог просто пропустить их с помощью ngRepeat в моем шаблоне. То, что я до сих пор это:
vm.cellModifier = function(cell) {
cell.text = 'Test Text';
var shifts = vm.events;
// Get the date for the cell.
this.cellDate = moment(cell.date).format('YYYY-MM-DD');
// Iterate over shifts to get ones for this day.
this.cell = cell;
this.todayShifts = {};
shifts.forEach(function(shift, index, allShifts) {
var shiftDate = moment(shift.data.date).format('YYYY-MM-DD');
// Now we need to see if this shift belongs to this day.
if (moment(vm.cellDate).isSame(moment(shiftDate))) {
// Shift is today, so let's put it into the appropriate array.
if (typeof vm.todayShifts[shift.data.ampm] == 'undefined') {
vm.todayShifts[shift.data.ampm] = shift;
} else {
vm.todayShifts[shift.data.ampm].push(shift);
}
}
});
// Add arrays to cell object.
cell.todayShifts = vm.todayShifts;
};
Это дает vm.todayShifts[am]
и vm.todayShifts[pm]
, но я также хотел бы получить второй уровень, так что у меня есть vm.todayShifts[am][1]
, vm.todayShifts[am][2]
и т.д. Есть более простой способ сделать то, что я я пытаюсь сделать (я уверен, что есть), чем добавлять другой раздел инструкций? Мне интересно, может ли пользовательская директива или компонент быть более чистым, потому что тогда я мог бы просто передавать свои данные в этот контроллер, но даже тогда мне все равно нужно было бы упорядочить мои данные, чтобы они отображались в правильном порядке.
Надеюсь, это все имеет смысл.
Спасибо.