AngularJs学习笔记-组件生命周期
组件生命周期
(1)组件生命周期钩子
constructor:组件创建时被创建
ngOnChanges: 父组件修改或初始化子组件的输入属性时被调用,如果子组件没有输入属性,则永远不会被调用,它的首次调用发生在ngOnInit之前
ngOnInit:用于初始化组件,因为ngOnChanges事件发生在constructor之后,所以构造函数无法获得输入属性,ngOnInit则能够取到输入属性,所以组件的初始化逻辑一定要依赖输入属性的值,则应该在ngOnInit中初始化而不是构造函数
ngDoCheck:Angular变更检测调用
ngAfterContentInit
ngAfterContentChecked
ngAfterViewInit
ngAfterViewChecked
(2)变ngOnChanges
可变对象、不可变对象

在js中,字符串是不可变对象,当一个字符串在内存中被创建后,它的值永远不会被改变。
如上图,第二行代码中的Hello World并不会改变Hello的值,而是重新创建出一个对象,
但是greeting的内存地址由第一个字符串指向了第二个字符串的地址。
而Object是可变对象,在修改Object的属性时,它的内存地址仍一直保持不变。
ngOnChanges钩子只有当输入属性的引用改变时才会被调用
如果输入属性是可变对象,其属性变化不会触发ngOnChanges钩子,但是会触发ngDoCheck钩子
(3)变更检测
变更检测依赖zone.js,用于处理组件属性的改变与模板的同步,浏览器中触发异步事件导致的方法调用会触发变更检测
比如:点击按钮、输入数据、数据从服务器返回,调用setTimeOut方法等等,
一个Angular应用是一个以主组件为根的组件树,每个组件都有其自己的变更检测器,
无论变更发生在哪个组件上,当变更发生时,会从组件树的根往下进行检测,
组件树上的变更检测器都会根据自己的变更检测策略(Default策略、OnPush策略)进行检测
变更检测会调用ngDoCheck钩子、ngAfterContentChecked钩子、ngAfterViewChecked钩子,
所以使用这些钩子时可能会出现性能问题
(4)AfterViewInit、AfterViewChecked
1、ngAfterViewInit、ngAfterViewChecked两个钩子会在视图组装完毕后被先后调用,
子组件会先调用这两个方法,然后父组件调用。ngAfterViewInit只会在视图组装完毕后被调用一次
ngAfterViewChecked会在ngAfterViewInit之后被调用一次,之后每发生变更检测会再被调用

、


2、在子组件中异步调用方法,触发变更检测,会先触发子组件的变更检测、再触发父组件的变更检测


3、在一个变更检测周期中,Angular禁止在一个视图被组装完毕之后再去更新视图,
所以不要在ngAfterViewInit和ngAfterViewChecked中更新视图中绑定的属性
然而ngAfterContentInit和ngAfterContentChecked触发时,组件尚未组装完毕,在这两个方法中可以修改模板中的绑定属性





变更检测是通过异步事件触发的,通过异步事件重新开启一个变更检测周期去改变绑定的属性不会报错

由于ngAfterViewInit只会执行一次,所以可以使用setTimeOut方法更改绑定的属性
但是在ngAfterViewChecked中使用此方法会造成无限循环



(5)运行时动态改变模板的内容又不使用路由,可以通过投影实现
通过在模板子组件标签中填充内容可以将内容投影到子组件中



通过select指定投影的内容



另一种在绑定动态html内容的方式,但是innerHtml只是浏览器中的特性,跨平台性不好

(6)ngAfterContentInit、ngAfterContentChecked
ngAfterContentInit、ngAfterContentChecked是投影相关的钩子

(7)ngOnDestroy
当从一个路由地址跳转到另一个路由地址时,前一个组件会被销毁,后一个组件会被创建
组件被销毁时会调用ngOnDestroy钩子,通常会在组件被销毁时反订阅一个流或者清除定时器等等
,
AngularJs学习笔记-组件生命周期的更多相关文章
- Angular 5.x 学习笔记(2) - 生命周期钩子 - 暂时搁浅
Angular 5.x Lifecycle Hooks Learn Note Angular 5.x 生命周期钩子学习笔记 标签(空格分隔): Angular Note on cnblogs.com ...
- vue 学习一 组件生命周期
先上一张vue组件生命周期的流程图 以上就是一个组件完整的生命周期,而在组件处于每个阶段时又会提供一些周期钩子函数以便我们进行一些逻辑操作,而总体来讲 vue的组件共有8个生命周期钩子 beforeC ...
- stenciljs 学习三 组件生命周期
stenciljs 组件包含好多生命周期方法, will did load update unload 实现生命周期的方法比价简单类似 componentWillLoad ....,使用typescr ...
- Android学习笔记_18_Activity生命周期 及 跳转方式
一.Activity有三个状态: 1.当它在屏幕前台时(位于当前任务堆栈的顶部),它是激活或运行状态.它就是响应用户操作的Activity. 2. 当它上面有另外一个Activity,使它失去了焦点但 ...
- Java Web学习笔记-Servle生命周期
Servlet会在服务器启动或第一次请求该Servlet的时候开始生命周期,在服务器停止的时候结束生命周期. 无论请求多少次Servlet,最多只有一个Servlet实例.多个客户端并发请求Servl ...
- android学习笔记 activity生命周期&任务栈&activity启动模式
activity生命周期 完整生命周期 oncreate->onstart->onresume->onpause->onstop->ondestory 使用场景:应用程序 ...
- iOS学习笔记—ViewController/生命周期
ViewController是iOS应用程序中重要的部分,是应用程序数据和视图之间的重要桥梁,ViewController管理应用中的众多视图.iOS的SDK中提供很多原生ViewController ...
- MVC学习笔记---MVC生命周期
Asp.net应用程序管道处理用户请求时特别强调"时机",对Asp.net生命周期的了解多少直接影响我们写页面和控件的效率.因此在2007年和2008年我在这个话题上各写了一篇文章 ...
- MVC学习笔记---MVC生命周期及管道
ASP.NET和ASP.NET MVC的HttpApplication请求处理管道有共同的部分和不同之处,本系列将体验ASP.NET MVC请求处理管道生命周期的19个关键环节. ①以IIS6.0为例 ...
随机推荐
- 关于特殊目录如com null无法删除的处理办法
1.把以下批处理做成一个del.bat放在桌面 del /f /a /q \\?\%1 rd /s /q \\?\%1 2.需要删除的文件或者文件夹拉到这个文件上就可以了 可以删除没有属性项目中没有安 ...
- 如何看待 Kotlin 成为 Android 官方支持开发语言
Google IO 2017宣布了 Kotlin 会成为 Android 官方开发语言.一时间朋友圈和Android圈被各种刷屏.当然我也顺势而为发布了一篇的文章<为什么我要改用Kotlin&g ...
- SQL 日期函数转换
1.转换函数 与date操作关系最大的就是两个转换函数:to_date(),to_char() to_date() 作用将字符类型按一定格式转化为日期类型: 具体用法:to_date('2004-11 ...
- STP-19-Port-Channel发现和配置
工程师在给一台交换机上的特定Port-Channel增加多个端口时,有一些配置参数必须相同,如下所示: 使用相同的速率和双工设置: 使用相同的操作模式(Trunk.Access.动态): 若不为T ...
- Leetcode初级算法(字符串篇)
目录 反转字符串 颠倒整数 字符串中的第一个唯一字符 有效的字母异位词 验证回文字符串 实现strStr() 数数并说 最长公共前缀 字符串转整数(atoi) 反转字符串 和vector同样的进行sw ...
- F. Relatively Prime Powers (求([2,n],内不是次方的数量)
题目:经过提炼后, 题目的意思就是问[2,n] 内,不是次方数的数量 ,: 思路: 答案就是 原理是利用容斥,注意n开i次根是向下取整(这题巨卡精度) 这是大神的思路 ,, 我还没有理解, 先放着,等 ...
- ACM-ICPC 2018 南京赛区网络预赛 B. The writing on the wall (暴力)
题意:一个n*m的方格矩阵,有的格子被涂成了黑色,问该矩阵中有多少个子矩阵,子矩阵不包含黑色格子; 思路:对于一个长为L, 高为H的无黑点矩阵中包含的高为H的子矩阵个数为L+(L-1)+(L-2)+. ...
- sql数据库发布、订阅同步方式操作
Sql数据库发布订阅分为两个步骤:1.发布.2.订阅.首先在数据源数据库服务器上对需要同步的数据进行发布,然后在目标数据库服务器上对上述发布进行订阅. 一.发布. 发布需要用实际的服务器名称,不能使用 ...
- kettle5.4ODBC和OCI连接配置
1.kettle 5.4 使用JDBC连接的时候报错(测试不同的数据库,发现只是连接11gRAC 的时候会报JDBC的错误) 具体报错如下 java.sql.SQLException: 建数据库连接出 ...
- 【tf.keras】tf.keras加载AlexNet预训练模型
目录 从 PyTorch 中导出模型参数 第 0 步:配置环境 第 1 步:安装 MMdnn 第 2 步:得到 PyTorch 保存完整结构和参数的模型(pth 文件) 第 3 步:导出 PyTorc ...