Как я могу вызвать 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
}
}
Возможно, есть более элегантные решения, но я нашел это работает. Вероятно, уже слишком поздно, чтобы помочь вам, но может помочь другим, поскольку, когда я гуглил это, я нашел этот вопрос. Решение было то, что я понял из отладки.