【发布时间】:2016-10-25 09:40:59
【问题描述】:
在上一个问题 here 中,我试图仅在 2 条消息之间发生更改时才显示日期。
不同之处在于我现在连接到一个实时数据库 (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,这就是引发异常的地方。 -
我知道这是故意的,但我怀疑它是否真的发生了。
-
@GünterZöchbauer 是的!我可能会在 OP 中发布一张图片,但显示带有日期“按钮”的第一个消息气泡,之后没有任何内容。
标签: javascript angular firebase firebase-realtime-database ionic2