如何在离子页面上触发 ngOnInit

Posted

技术标签:

【中文标题】如何在离子页面上触发 ngOnInit【英文标题】:How to fire ngOnInit on page in ionic 【发布时间】:2020-11-17 23:51:35 【问题描述】:

我正在使用 ionic 5 和 angular 9。并使用 angular Router 在页面之间移动。但这给我带来了一个问题,在离子中,ngOnInit 不再被调用。我知道 ionic 中有一个 NavController 以及它抛出的生命周期事件......但我需要知道是否有一种方法可以使用角度路由器并再次调用 ngOnInit。

一些代码来说明...

第 1 页:

goToPerson(person)
this.router.navigateByUrl("/personProfile", state:person, replaceUrl:true);

第 2 页:

ngOnInit() 
this.person = this.router.getCurrentNavigation().extras.state as Person;

if(this.person.photo != null)
  this.photoPerfil = environment.img_url + this.person.photo.fileName;
else
  this.photoPerfil = "../../../assets/images/person.png";


【问题讨论】:

【参考方案1】:

你必须设置自己的Route Reuse Strategy并将shouldReuseRoute设置为false https://angular.io/api/router/RouteReuseStrategy

【讨论】:

【参考方案2】:

我使用 ionViewWillEnter() 代替,因为 onInit 只会触发一次

ngOnInit() 在 Angular 首次显示数据绑定属性并设置指令或组件的输入属性后初始化指令或组件。 在第一个 ngOnChanges() 之后调用一次。

【讨论】:

以上是关于如何在离子页面上触发 ngOnInit的主要内容,如果未能解决你的问题,请参考以下文章

刷新页面时未触发 Angular callHooks

ngOnInit 不在错误页面组件上运行

如何从主选择页面隐藏离子标签并仅在选择模式标题上显示

急:js 如何在子页面触发父页面的某个按钮

所有页面通用的 Angular ngOnInit

即使取消订阅,订阅者也会触发