ngOnInit быстрее, чем @Input

У меня есть ситуация, когда я передаю значение из родительского компонента в дочерний компонент с помощью @Input. Проблема в том, что я не получаю значение от отца до того, как ngOnInit() сработает в дочернем компоненте. Итак, что происходит, когда ngOnInit() пытается выполнить sg со значением «undefined», а через секунду значение заполняется, но ngOnInit() уже выполнено. Надеюсь, это было достаточно ясно.

Есть ли способ синхронизировать эти два, поэтому сначала я получаю данные, а затем заполняю элементы?

         @Input('data')
      set data(value) {
        this._data = value;
         this.noActivityData = (this._data === null || this._data === undefined);
      }

ngOnInit() {

     if(this._data){
       elements.activeTimeDistribution.selected = !this.noActivityData;
       elements.stepsDay.selected = !this.noActivityData;
       elements.walkingSpeed.selected = !this.noActivityData;
       elements.activeTimeDistribution.disabled = this.noActivityData;
       elements.stepsDay.disabled = this.noActivityData;
       elements.walkingSpeed.disabled = this.noActivityData;

     }

    });
  }

person Tolga Tamer    schedule 18.07.2019    source источник
comment
Можете ли вы попробовать поместить свой @Input() в конструктор, так как он «загружается» перед чем-либо еще, например, ngOnInit()   -  person Pari Baker    schedule 18.07.2019
comment
Почему бы не вызвать функцию инициализации в set data и забыть о ngOnInit()?   -  person Eliseo    schedule 18.07.2019


Ответы (1)


Одним из вариантов было бы добавить *ngIf к вашему дочернему компоненту и отображать его только после того, как родитель получит значение, которое вы хотите передать.

<app-child-component
*ngIf="variable_you_want_to_pass_through">
</app-child-component>

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

https://angular.io/api/core/OnChanges

person Sam    schedule 18.07.2019