一篇文章快速了解Angular和Ionic生命周期和钩子函数

 更新时间:2021年07月12日 12:00:19   作者:MMMMQI  
Ionic以AngularJS和ApacheCordova为基础,使用Node.js进行模块管理,使用Html5、Css(SASS)和Javascript技术进行APP开发,这篇文章主要给大家介绍了如何通过一篇文章快速了解Angular和Ionic生命周期和钩子函数的相关资料,需要的朋友可以参考下

Angular

实现

首先实现方式不用多说,使用钩子函数需要在定义的时候实现对应的接口

export class ListPage implements OnInit {
  constructor() {}

  ngOnInit() {
    // code here
  }
}

调用顺序

1、constructor

最先执行的是构造函数,在执行构造函数的时候,@Input、@ViewChild等很多变量都是不存在的,相关操作最好写在ngOnInit里。

2、ngOnChanges

当前组件@Input/@Output的绑定值发生变化时会触发。
另外如果@Input是对象,只有引用发生变化的情况下才会触发。

3、ngOnInit

在第一次 ngOnChanges 完成后调用,只会执行一次

4、ngDoCheck

开发者自定义变更检测。

5、ngAfterContentInit

组件内容初始化的时候执行一次

6、ngAfterContentChecked

投射到组件的内容每次ngDoCheck调用后触发。

7、ngAfterViewInit

组件及其子组件视图初始化的时候执行一次

8、ngAfterViewChecked

组件及其子组件视图每次ngDoCheck调用后触发。

9、ngOnDestroy

在组件销毁前调用。

注意

  • 并不是所有的数据在constructor里都存在,@ViewChild @ViewChildren @Input等值都还没绑定
  • 任何的变更检测都会触发ngDoCheck,详见 非常消耗性能,需要小心使用

Ionic

原文档可以点上面的链接看到,挑重点说一下。

生命周期如图,除了angular提供的生命周期,ionic添加了几个事件:

  • ionViewWillEnter 路由组件即将显示到视图
  • ionViewDidEnter 路由组件已经显示到视图

在ngOnInit之后触发ionViewWillEnter,页面切换的过渡效果结束之后触发ionViewDidEnter

  • ionViewWillLeave 即将离开当前路由的组件
  • ionViewDidLeave 已经离开当前路由的组件

先调用ionViewWillLeave,直到成功过渡到新页面之后(在新页面ionViewDidEnter触发之后),ionViewDidLeave才被调用。

使用ion-nav或ion-router-outlet的组件不应使用OnPush变化检测策略,这样会导致ngOnInit之类的生命周期hooks无法触发。另外,异步变化的数据可能不能正确渲染。

ionic是怎么处理页面的生命周期的

ionic使用的路由出口是<ion-router-outlet />,它拓展了angular的<router-outlet />,可以在移动设备上有更好体验。

从一个页面跳转到一个新页面的时候,ionic会把旧页面保存在dom中,并且从视图上隐藏。这样可以保持住上一个页面的状态,比如滚动位置、页面数据,这样从新页面返回到上一个页面的时候,就不用重新加载一次,页面过渡也比较平滑。

页面只有从堆栈中退出的时候,才会真正销毁,所以ngOnInit 和ngOnDestroy 触发的时机和想象中可能不太一样。

比如A是详情页,进入B页面修改数据。修改完成后从B页面返回A页面。
如果A页面的数据获取方法是写在ngOnInit里的,那么从B返回到A的时候,因为ngOnInit是不会触发的,显然不符合业务要求。
所以这个数据的获取可以写在ionViewWillEnter里,这样从B返回A的时候就可以触发并更新

路由守卫

Ionic 3里曾经有过ionViewCanEnter 和ionViewCanLeave两个钩子函数,用来判断页面是否可以进入/离开,一般用来限制访问权限 或者离开编辑页面之前弹出二次确认提示。这两个函数已经废弃了,Ionic 4以后使用angular官方的路由守卫

总结

到此这篇关于Angular和Ionic生命周期和钩子函数的文章就介绍到这了,更多相关Angular Ionic生命周期和钩子函数内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Angular中的结构指令模式及使用详解

    Angular中的结构指令模式及使用详解

    这篇文章主要为大家介绍了Angular中的结构指令模式及使用示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-08-08
  • Angular2使用vscode断点调试ts文件的方法

    Angular2使用vscode断点调试ts文件的方法

    本篇文章主要介绍了Angular2使用vscode断点调试ts文件的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-12-12
  • Angular 的 Change Detection机制实现详解

    Angular 的 Change Detection机制实现详解

    这篇文章主要为大家介绍了Angular 的 Change Detection机制实现详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-10-10
  • 详解使用KeyValueDiffers检测Angular对象的变化

    详解使用KeyValueDiffers检测Angular对象的变化

    这篇文章主要为大家介绍了KeyValueDiffers检测Angular对象的变化使用详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-04-04
  • AngularJS监听路由变化的方法

    AngularJS监听路由变化的方法

    本篇文章主要介绍了AngularJS监听路由变化的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-03-03
  • AngularJS实现自定义指令与控制器数据交互的方法示例

    AngularJS实现自定义指令与控制器数据交互的方法示例

    这篇文章主要介绍了AngularJS实现自定义指令与控制器数据交互的方法,结合具体实例形式分析了AngularJS自定义指令的实现以及与控制器数据交互的操作技巧,需要的朋友可以参考下
    2017-06-06
  • AngularJS 教程及实例代码

    AngularJS 教程及实例代码

    AngularJS 通过新的属性和表达式扩展了 HTML。AngularJS 可以构建一个单一页面应用程序(SPAs:Single Page Applications)。本文给大家介绍angularjs 的相关知识,感兴趣的朋友一起看看吧
    2017-10-10
  • 关于Angularjs中跨域设置白名单问题

    关于Angularjs中跨域设置白名单问题

    这篇文章主要介绍了Angularjs中关于跨域设置白名单问题,需要的朋友可以参考下
    2018-04-04
  • 详解Angular如何正确的操作DOM

    详解Angular如何正确的操作DOM

    这篇文章主要介绍了详解Angular如何正确的操作DOM,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-07-07
  • AngularJS中一般函数参数传递用法分析

    AngularJS中一般函数参数传递用法分析

    这篇文章主要介绍了AngularJS中一般函数参数传递用法,结合实例形式分析了模型参数与普通参数的具体功能与使用技巧,需要的朋友可以参考下
    2016-11-11

最新评论