Перед добавлением различий, обратите внимание, что ngOnInit
не будет работать вообще в вашем случае. Он не будет вызван.
Единственный хук жизненного цикла, который будет работать со службами, - это ngOnDestroy
, который будет вызываться при разрушении службы. Все другие хуки жизненного цикла, такие как ngOnInit
, не будут вызываться, поскольку они будут вызываться только для компонентов и директив.
Я добавлю различия и включу ngOnInit
, если вместо этого он реализован внутри компонента / директивы.
Для различий между присваиваниями конструктора и прямыми прямыми присваиваниями, начиная с здесь :
Оба являются правильными в программировании,
Инициализируется в конструкторе
Это было бы хорошей практикойинициализация внутри конструктора, это своего рода разделение кода объявления + инициализации.
Это повысит читабельность вашего кода, и вы будете уверены, что все значения инициализируются только внутри конструктора. и потому что в конструкторе это когда объект создается, и это когда переменная должна быть инициализирована.
Инициализировано вне конструктора
Одна проблема с инициализацией с использованием конструктора - больше кода для записи, когда у вас есть переменная alot для работы, в этом случае вы должны использовать прямую counter: number = 1
. В этом случае вы можете проверить объявление + инициализацию в одной строке, нов приведенном выше случае вы должны пройти через 2 шага: объявление + инициализация
Это действительно важно, когда вы выбираете инициализацию в одном из ловушек жизненного цикла (например, 1039 * / NgAfterViewInit
) противconstructor
. Либо это просто стиль кодирования
Для конструктора и хука ngOnInit, начиная с здесь :
Constructor
является значением по умолчаниюметод класса, который выполняется, когда создается экземпляр класса, и обеспечивает правильную инициализацию полей в классе и его подклассах. Angular или лучше Dependency Injector (DI) анализирует параметры конструктора и, когда он создает новый экземпляр, вызывая new MyClass()
, он пытается найти поставщиков, которые соответствуют типам параметров конструктора, разрешает их и передает их конструктору, как
new MyClass(someArg);
ngOnInit
- это хук жизненного цикла, вызываемый Angular2, чтобы указать, что Angular завершил создание компонента.
Нам нужно импортировать OnInit
, чтобы использовать его так (фактически реализуя OnInit
не является обязательным, но считается хорошей практикой):
import {Component, OnInit} from '@angular/core';
затем, чтобы использовать метод OnInit
, мы должны реализовать его в классе следующим образом.
export class App implements OnInit{
constructor(){
//called first time before the ngOnInit()
}
ngOnInit(){
//called after the constructor and called after the first ngOnChanges()
}
}
Реализуйте этот интерфейс для выполнения пользовательской логики инициализации после инициализации связанных с данными свойств вашей директивы. ngOnInit вызывается сразу после того, как привязанные к данным свойства директивы были проверены впервые, и до того, как был проверен любой из его дочерних элементов. Он вызывается только один раз, когда создается директива.
В основном мы используем ngOnInit
для всей инициализации / объявления и избегаем вещей, которые будут работать в конструкторе. Конструктор должен использоваться только для инициализации членов класса, но не должен выполнять фактическую «работу».
Поэтому вы должны использовать constructor()
для настройки Dependency Injection и ничего больше. ngOnInit () - лучшее место для «запуска» - именно здесь / когда разрешаются привязки компонентов.
Для получения дополнительной информации см. здесь: