Конструктор выполняется, когда экземпляр класса создается и обеспечивает правильную инициализацию класса? поля. Вот где Angular разрешает провайдеры, которые вы можете передать в качестве аргументов в свой конструктор.
Ключ жизненного цикла ngOnInit вызывается после того, как свойства, связанные с данными, были проверены в первый раз (входы и выходы компонента). Для более подробного объяснения см. Этот вопрос .
Мотивация выбора из ngrx-хранилища в конструкторе и отправка из ngOnInit, насколько я понимаю, заключается в том, что выбор является частью инициализации вашего класса компонента. Поскольку this.books$
это Observable, имеет смысл инициализировать его в конструкторе, чтобы он был готов к использованию сразу после создания. Предполагая, что bookCollection.Load()
испускает значение для this.books$
вас, вы хотите this.books$
быть наблюдаемым из этих книг до того, как испустят возможное значение.
Поскольку вы хотите, чтобы те значения, которые испускались, имели this.books$
смысл отправить действие в ngOnInit. Таким образом, вы можете определить, что this.books$
инициализировано.
Этот ответ на аналогичный вопрос также может помочь.