如何在ngOnInit中设置每个输入值后才能触发ngOnChanges

时间:2017-03-23 15:35:59

标签: angular ngoninit ngonchanges

如何在ngOnInit中设置每个输入值后才能触发ngOnChanges。 我的代码 - >

`ngOnInit() {
this.multiSelectorData.forEach(item=>{
            this.allItems.push(item.data);
        });
}
ngOnChanges(changes: SimpleChanges) {
        if(changes['dataReady'] && changes['dataReady'].currentValue) {
   console.log(this.allItems);
}`

我不会在ngonit中使用ngonit初始化数组,因为在ngonit之前调用了ngonchanges,如何在检查ngonchanges之前检查是否所有都被初始化了?

1 个答案:

答案 0 :(得分:2)

我发现一种方法是基于输入值都具有先前值属性的事实。如果先前未设置输入,则该值将为CD_INIT_VALUE(作为字符串)。因此,您可以规定ngOnChanges中的代码块只有在前一个值不是CD_INIT_VALUE时才能运行。以下是您测试所有输入值的示例:

ngOnChanges(changes: SimpleChanges) {
  let initialized: boolean = true;
  for (let prop in changes) {
    if (changes[prop].previousValue.toString() === 'CD_INIT_VALUE') {
      initialized = false;
      //we can break here since if any item is not initialized
      //we will say the inputs are NOT initialized
      break;
    }
  }

  if (initialized) {
    //code you want to execute
  }    
}

可能有更优雅的解决方案,但我发现这有效。 这可能为时已晚,无法帮助你,但可能会帮助别人,因为当我用Google搜索时,我发现了这个问题。解决方案是我从调试中发现的。