Как я могу вызвать ngOnChanges только после того, как все входные значения были установлены в ngOnInit

Как я могу вызвать ngOnChanges только после того, как все входные значения были установлены в ngOnInit. Мой код ->

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

Я не получу массив, который я инициализировал в ngonit в ngonchanges, потому что ngonchanges вызывается перед ngonit, как я могу проверить, все ли инициализированы перед проверкой ngonchanges?

1 ответ

Один метод, который я обнаружил, работает, основан на том факте, что все входные значения имеют свойство предыдущего значения. Если вход не был ранее установлен, то это значение будет 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
  }    
}

Возможно, есть более элегантные решения, но я нашел это работает. Вероятно, уже слишком поздно, чтобы помочь вам, но может помочь другим, поскольку, когда я гуглил это, я нашел этот вопрос. Решение было то, что я понял из отладки.

Другие вопросы по тегам