В ngOnInit, когда я делаю:
console.info(this.tournament.slug);
Я получаю this.tournament is null
эта переменная происходит из родительского представления:
@Input() tournament: Tournament;
турнир является результатом запроса, поэтому для получения значения потребуется некоторое время, поэтому ngOnInit не работает.
Как мне сделать, чтобы избежать этой ошибки?
Проверить жизненный цикл ngAfterViewInit
Нет, это неверно, поскольку ловушка ngAfterViewInit() в основном используется для проверки определенных визуализированных элементов, а не для входящих асинхронных входов. См. angular.io/guide/lifecycle-hooks#lifecycle-sequence





Если он не установлен сразу, возможно, вы могли бы использовать сеттер на входе, чтобы реагировать, когда родительский компонент пытается его установить?
@Input()
set tournament(val) {
this._tournament = val;
console.info(this._tournament.slug);
}
webstorm дает: функция 'турнир' повторяется бесконечно и может закончиться только выдачей исключения
Не могли бы вы опубликовать описание вашего дела?
переименуйте переменную турнира, это, скорее всего, потому, что "this.tournament" конфликтует с функцией с тем же именем. Отредактированный ответ
В этих случаях вам следует использовать ловушку жизненного цикла ngOnChanges() от Angular.
Что-то вроде этого :
ngOnChanges() {
if (this.tournament) {
console.info(this.tournament.slug);
}
}
Это базовая реализация хука ngOnChanges(), поэтому обратитесь к официальной документации, если вам нужно управлять сложным случаем (например, несколько входов поступают асинхронно и постоянно обновляются, и вам нужно контролировать каждый вход отдельно).
В этом случае перейдите по этой ссылке: https://angular.io/guide/lifecycle-hooks#onchanges
РЕДАКТИРОВАТЬ: Как я видел в этом видео, и это кажется действительно точным, ловушка ngOnChanges() предпочтительнее при работе с несколькими @Input(), в то время как параметр установки предпочтительнее при работе с одним свойством @Input().
https://thewikihow.com/video_BYwfrSlJFfY?t=711
Зарегистрируйтесь после запуска просмотра