在组件中的ngOnInit()之前触发属性

时间:2019-07-25 19:37:52

标签: javascript user-interface angular6 frontend

我是Angular的新手,我尝试了一些代码,这些代码在ngOnInit()之前触发了属性集。

export class App implements OnInit{
  isTriggered = false;

  constructor(){
    ...
  }

  ngOnInit(){
    this.isTriggered = true;
  }
}

我不确定这是如何工作的,但是在调试器移至isTriggered = false;之前先触发this.isTriggered = true;

有人可以向我解释为什么会这样,以及从ngOnInit()触发this.isTriggered = true;的方法是什么

3 个答案:

答案 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即可。