请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

组件生命周期函数的问题

老师,这部分我不是很清楚,所以问题很多。
一,这些钩子函数,如果我们不写在自己的程序中,它们还会运行吗?例如脏值检测,如果不写在程序中,我的理解是由于是系统框架完成,所以脏值检测还是会运行,但是我们不能再在这个过程中主动添加内容了。
二,初始化的概念。我把它和构造函数实例化混淆在一起了,所以理解起来很困难。从构造到初始化,到底是什么关系,时间上的先后,还是逻辑上有关系?
实例化的过程中只是建立的一个属性都是空值的实例吗?如果是空值的话,那属性的值是什么时候赋进组件的?所有的属性是空值(undefined)吗?还是只有输入属性是空值?ngOnChanges()第一次比较的值,分别是什么时候的值?
三,渲染也请老师讲解以下,渲染和加载是同一个概念吗?有什么异同?实例化之后,就会渲染在界面吗?那属性是undefined的时候,界面显示什么呢?其实我不太明白,我们的code是如如何呈现的,过程和逻辑。
四,组件脏值检测,是angular进行的,那它是什么时候发生?而且是多次被触发,那是多频繁发生,或者什么触发脏值检测?
为什么最开始ngOnChanges()会被触发,来比较输入属性,这时输入属性改变了,为什么没触发脏值检测呢?
ngAfterViewChecked 只是在子视图的绑定元素被检测时才被调用。这里“被检测”是如何被触发的,是子视图的绑定元素发生变化,然后触发检测,之后会运行我们写在ngAfterViewChecked 里的code吗?
问题很多,可能我对某些内在的逻辑还是没有理解,请老师讲解。先谢谢您了。

正在回答 回答被采纳积分+3

1回答

接灰的电子产品 2022-12-24 13:29:15
  1. 生命周期函数是只有你写了才会调用,你可以理解成系统有个大循环,针对每个生命周期,会去循环每个组件,如果这个组件有这个函数,它就调用。

  2. 变量的初始化,可以在构造函数中初始化,也可以直接赋初始值。无论哪种本质上其实都是在对象构造过程中初始化的。组件自己本身的属性可用是在 ngOnInit 之后,所有的生命周期函数都是在构造函数之后的。也就是说变量的初始化一定要在构造函数中或者直接赋值来完成。

  3. 模版和组件类在编译后是一个东西,渲染的时候其实是组件实例化后才开始的,所有的成员变量的初始值不一定需要有,没有的话其实只要你声明为可空的类型即可,比如 content?: string; 这就是说我这个变量可以没有初始值。所以初始化与否是看需求和编程的倾向性而定。没有初始值,怎么渲染看你模版怎么处理,你可以使用 ngif 给有值或没值分别处理,也可以直接渲染为空字符串,这个没啥影响

  4. 脏值检测,一般都是有事件触发的时候或者值改变的时候,比如你点了加号按钮,你希望计数器增加一,于是你把成员变量加了 1,但你改变的只是成员变量,页面怎么知道呢?双向绑定怎么起的作用呢?这就是脏值检测,你的变量值变了,系统就会进行脏值检测,发现你的模版里面绑定了这个值,然后就通知界面进行改变

  5. 生命周期是个大循环,会循环所有组件,ngAfterViewChecked 只是其中一个生命周期函数

0 回复 有任何疑惑可以回复我~
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信