【发布时间】:2019-11-16 10:24:04
【问题描述】:
我在 Ionic 4 页面中的订阅有问题。当我直接在浏览器中通过其路由加载页面时,就会触发 subscribe 方法。如果我通过路由器链接导航到该页面,则不会触发订阅方法。
我正在使用Ionic Tabs 并阅读了一些 GitHub 问题,这些问题表明生命周期事件在选项卡导航之间无法正常工作。
请从我的页面 (score.page.ts) 中查看以下代码:
ngAfterViewInit() {
console.log('ngAfterViewInit');
this.productService.points.subscribe(
(e) => console.log('score points', e)
);
}
ionViewDidLoad() { console.log('ionViewDidLoad'); }
ngOnInit(): void {
console.log('ngOnInit');
}
ionViewWillEnter() { console.log('ionViewWillEnter'); }
ionViewDidEnter() { console.log('ionViewDidEnter'); }
ionViewWillLeave() { console.log('ionViewWillLeave'); }
ionViewDidLeave() { console.log('ionViewDidLeave'); }
ionViewWillUnload() { console.log('ionViewWillUnload'); }
ngOnDestroy() {
console.log('ngOnDestroy');
}
直接加载/app/home/score的控制台输出:
如您所见,生命周期事件正常工作,并且订阅方法已按预期调用。
当我加载 /app/home 并导航到 /app/home/score(我尝试了 routerlink 和 router.navigate)时,订阅的控制台日志丢失:
这是一个大问题,因为我需要在不同的页面上动态显示数据,如果我无法从我的服务订阅 Observable,这是不可能的。
我还在模板中尝试了{{ productService.points | async }},因为此后 Angular 处理订阅本身,但错误保持不变。
productService.points是 Observable<Number> 类型,但错误也发生在其他 Observables 上。
我应该为此提出问题还是我只是遗漏了什么?
如果您需要其他内容,请发表评论。
提前致谢
【问题讨论】:
-
你能告诉我你在什么时候发出数据意味着 this.productService.points
-
this.points = this.transactions.pipe( map((transactions) => transactions.map(t => t.points)), map((t) => t.reduce((sum, points) => sum + points)) );points 是从 firestore 的 vaueChanges() 函数转换而来的数组
标签: angular ionic-framework observable ionic4