2016-03-07 3 views
68

Если я хочу, чтобы функция x выполнялась каждый раз, когда компонент загружается, независимо от того, в первый раз, я перехожу на другой сайт и перемещаюсь назад, или это уже пятый раз, когда компонент загрузился.Angular 2 Component Constructor Vs OnInit

Что нужно положить в функцию x? Конструктор компонента или OnInit?

ответ

70

Конструктор предопределена метод класса Машинопись по умолчанию. Между Угловым и constructor нет никакой связи. Обычно мы используем constructor для определения/инициализации некоторых переменных, но когда у нас есть задачи, связанные с привязками Углового, мы переходим к крюку жизненного цикла Angular ngOnInit. ngOnInit вызывается сразу после вызова конструктора. Мы также можем выполнять ту же работу в конструкторе, но предпочтительно использовать ngOnInit, чтобы начать привязку Углового.

для того, чтобы использовать ngOnInit мы должны импортировать этот крюк из библиотеки ядра:

import {Component, OnInit} from '@angular/core' 

Затем реализовать этот интерфейс с экспортируемым классом (это не является обязательным для реализации этого интерфейса, но в целом мы сделали).

Пример использования как:

export class App implements OnInit{ 
    constructor(){ 
    //called first time before the ngOnInit() 
    } 

    ngOnInit(){ 
    //called after the constructor and called after the first ngOnChanges() 
    } 
} 

Более подробно см также Difference between Constructor and ngOnInit

+1

Но вы не ответили на реальный вопрос. который мы должны использовать в этом случае ..? –

+3

ngOnInit не вызывается сразу после вызова конструктора, между ними есть ngOnChanges: https://angular.io/guide/lifecycle-hooks – Hazlo8

22

Первый (конструктор) связан с экземпляром класса и не имеет ничего общего с Angular2. Я имею в виду, что конструктор может использоваться для любого класса. Вы можете добавить в него некоторую обработку инициализации для вновь созданного экземпляра.

Вторая соответствует жизненному циклу крючок компонентов Angular2:

  • ngOnChanges называется, когда входное или выходная привязка значение изменяется
  • ngOnInit вызывается после первого ngOnChanges

So вы должны использовать ngOnInit, если обработка инициализации вашей функции зависит от привязок компонента (например, параметры компонента, определенные с помощью @Input), в противном случае конструктор будет достаточно ...

+0

Существуют ли ситуации, в которых с помощью 'ngOnInit' над конструктором будет плохо? – dman

14

constructor() является машинописной функцией и вызывается для new SomeClass(). Конструктор обеспечивает правильный порядок инициализации поля в иерархиях классов.

ngOnInit - метод жизненного цикла Angular2, который вызывается угловым, когда он был создан для создания компонента и после того, как он оценил привязки и обновил входные данные в первый раз.

Смотрите также Difference between Constructor and ngOnInit

+0

Вы на 100% прав, и я за вас. На мой взгляд, если мы опишем 'ngOnInit' как' componentDidMount 'React, вся путаница исчезнет. Но, честно говоря, для разработчиков нам просто нужно иметь только одну фразу инициализации, независимо от того, как она называется. Очень старый способ - использовать функцию типа класса для создания класса компонентов, поэтому впрыск передается как аргументы, и вам нужен только один '$ onInit'. Ng2 + - это не произведение искусства. – stanleyxu2005

+0

Конструктор - это функция языка TypeScript с определенными ограничениями. Нет ничего, что могло бы уговорить Угловое. –

Смежные вопросы