我是Angular的新手,我尝试了一些代码,这些代码在ngOnInit()之前触发了属性集。
export class App implements OnInit{
isTriggered = false;
constructor(){
...
}
ngOnInit(){
this.isTriggered = true;
}
}
我不确定这是如何工作的,但是在调试器移至isTriggered = false;
之前先触发this.isTriggered = true;
有人可以向我解释为什么会这样,以及从ngOnInit()触发this.isTriggered = true;
的方法是什么
答案 0 :(得分:1)
实际上很明显。要调用 ngOnInit ,您需要一个App类的实例。创建实例时,将首先初始化所有声明的字段。
答案 1 :(得分:1)
问题在于,ngOnInit
是Angular生命周期方法,而isTriggered = false
是Java语言固有的类属性,就像您将其放置在构造函数中一样。
以古老的做事方式甚至在Javascript类问世之前就已经很明显了。
export function App() {
this.isTriggered = false;
this.ngOnInit = function() { };
}
这样看来,很明显isTriggered = false
将在创建new App()
与ngOnInit
之后立即被调用,而ngOnInit
仅在new
对象已创建。
Angular生命周期方法将在Angular的框架时间上发生,这意味着它将在该类初始化之后的某个时间发生。在该类的初始化期间,将设置class属性,因此为什么看到调试器首先转到该行。
答案 2 :(得分:0)
在声明isTriggered = false
时,就如同初始化它一样,就好像它是构造函数的一部分一样。 ngOnInit之后发生,因此这就是为什么要将其设置为false然后设置为true的原因。
您可以声明isTriggered
而不给其赋值,只需删除= false;
即可,然后仅在ngOnInit中将其赋值为true即可。