2016-07-05 1 views
0

Я работаю над Угловым приложением, которое использует 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] и т.д. Есть более простой способ сделать то, что я я пытаюсь сделать (я уверен, что есть), чем добавлять другой раздел инструкций? Мне интересно, может ли пользовательская директива или компонент быть более чистым, потому что тогда я мог бы просто передавать свои данные в этот контроллер, но даже тогда мне все равно нужно было бы упорядочить мои данные, чтобы они отображались в правильном порядке.

Надеюсь, это все имеет смысл.

Спасибо.

ответ

1

Я думаю, что вы на самом деле довольно близко ... Попробуйте это, которое всегда будет помещать данные в формат, который вы просите.

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') { 

     // Initialize the shifts as an array. 
     vm.todayShifts[shift.data.ampm] = []; 
    } 

    // Push the shift onto the array. 
    vm.todayShifts[shift.data.ampm].push(shift); 
    } 
}); 
Смежные вопросы