В предыдущем вопросе here, я пытаюсь показать дату только тогда, когда она изменилась между двумя сообщениями.Angular2: * ngFor, AsyncPipe и index
Разница заключается в том, что я сейчас подключен к базе данных в реальном времени (Firebase), поэтому я присоединяюсь к источнику данных и передать его через асинхронном трубу перед выходом через индекс и * ngIf:
<div *ngFor='let message of (chat | async) ; let i = index'>
<button *ngIf="i == 0 || (message.timestamp | date: 'ddMMMMyyyy') != ((chat | async)[i-1].timestamp | date: 'ddMMMMyyyy')">
{{ message.timestamp | date:'ddMMM' }}
</button>
...
<!--More html elements below (omitted)-->
...
</div>
Этот хорошо работает, когда я сначала загрузить вид, однако, если я нажимаю новую запись в chat
, я получаю следующее сообщение об ошибке:
TypeError: Cannot read property '0' of null
Может быть, я не слишком уверен, как Асинхронная труба работает, но когда я пытаться возвращается {{ (chat | async).length }}
, он работает по назначению. Любые предложения по обходной/надлежащей практике?
ли вы проверить, если '' || Короткое замыкание при использовании в шаблоне? Может быть, ошибка. –
@ GünterZöchbauer Короткое замыкание предназначено, поскольку перед сообщением с индексом 0 нет ничего, поэтому он должен возвращать true. В индексе 1 '[i-1]' оценивается как 0, и именно там генерируется исключение. – shinglesmingles
Я знаю, что это предназначено, но я подозрительно, действительно ли это происходит. –