【问题标题】:Angular / Ionic 4: trigger change detection when coming back from another pageAngular / Ionic 4:从另一个页面返回时触发更改检测
【发布时间】:2019-10-07 18:28:03
【问题描述】:

我是 Angular 和 Ionic 4 的新手,正在构建一个 Ionic 应用程序。我有以下情况:

一个页面中有 2 个组件。我在组件 A 中并向前导航到组件 B,然后打开模态并更新数据库 (SQLite)。

我需要使用数据库中保存的新值来更新组件 A 的模板。但是当我单击组件 B 上的后退按钮(返回 A)时,我无法读取数据库,因为似乎此事件不会触发组件 A 上的任何内容。

我试图在 onDoCheck 中读取数据库,但它进入了一个循环。

我试图让组件 B 在单例上写入一个值,然后让组件 A 在 onDoCheck 中检查它,但它也不起作用。

我试图在模态的确认中调用 ApplicationRef.tick()。但它并没有在 A 上触发任何东西。

我没有找到一种方法来捕获从组件 B 到 A 的“返回事件”。如果我找到了,我会尝试在该事件上调用 ApplicationRef.tick()...

它猜这是非常基本的东西,我可能错过了一些重要的 Angular 概念。 有人可以在这里给我一些亮光吗?

【问题讨论】:

  • 在组件 A 中的 ionviewdidload 方法中调用
  • hmmm.. 可能在组件 A 上的 ionViewWillEnter 中检查数据库?
  • 是的,也很好
  • 非常感谢,它与 WillEnter 一起工作! ..我找了几个小时的解决方案!
  • 欢迎,我会更新为答案,以便将来对需要的人有用

标签: angular ionic-framework


【解决方案1】:

您要做的是父子组件之间的通信,使用组件 A 的 AfterViewInit 实现非常容易:

export class A implements OnInit, AfterViewInit{
@Input() SharedValue = {}
ngAfterViewInit(): void {
        if (this.B) {
            this.SharedValue= this.B['sharedValue'];
        }
    }
}

【讨论】:

  • 这意味着 A 是 B 的父级,并且都有一个 SharedValue 输入
  • 感谢 angular 版本,Sa E Chowdary 给出了基于 Ionic 的答案
  • 在我的情况下,A 和 B 是兄弟姐妹...有区别吗?
  • 是的!兄弟姐妹的父母应该实现我提供的代码。
【解决方案2】:

ionic 自己的生命周期事件将满足您的要求,例如 ionViewDidLoad(),ionViewWillEnter(),ionViewWillLeave(),ionViewDidLeave(),ionViewWillUnload()

【讨论】:

  • 这些所有生命周期都与 ionic 版本 3 相关,我错了吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-01-14
  • 1970-01-01
  • 2018-07-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-09
相关资源
最近更新 更多