【发布时间】:2020-05-13 18:19:00
【问题描述】:
我有以下代码应该显示音频文件的长度:
ngAfterViewInit() {
this.duration$ = fromEvent(this.player.nativeElement, 'loadeddata').pipe(
map((event: any) => {
return this.convertDuration(event.target.duration);
}));
}
但它不会显示在我的 HTML 中,如下所示:
<div>{{ duration$ | async }}</div>
这可能是什么问题?我尝试订阅我的组件,这很有效:
this.duration$.subscribe(x => console.log(x));
初始化:duration$: Observable<string>;
看了@EliyaCohen 的演示后,我意识到我的代码不起作用的原因是因为我启用了ChangeDetectionStrategy.OnPush。我认为我现在的问题是如何在不调用 detectChanges() 或 markForChange() 的情况下触发更改检测。
这是我的demo。
【问题讨论】:
-
控制台中的任何javascript错误?如果将
return this.convertDuration(event.target.duration);替换为return 10;是否有效? -
没有错误。已经尝试放置一个虚拟字符串和相同的结果。正如我所说,
subscribe()函数按预期工作,所以奇怪的是为什么它不在 HTML 中打印。 -
如果没有完整的代码,我想不出任何东西。
this.duration$.subscribe(x => console.log(x));在 ngAfterViewInit 赋值后使用? -
这就是整个代码。我已经添加了我如何初始化我的变量。
convertDuration()返回持续时间的 mm:ss 格式。this.duration$.subscribe(x => console.log(x));在作业下方,我只添加了该行来测试可观察对象是否有效。它不是真正的代码的一部分。 -
你可以试试
<div *ngIf="duration$">{{ duration$ | async }} </div>
标签: angular typescript rxjs angular-observable