Когда создавать конструктор в Angular2 typescript?
Вот некоторые примеры конструкторов из Angular 2 документов:
export class AppComponent implements OnInit {
title = 'Tour of heroes';
heroes: Hero[];
selectedHero: Hero;
constructor(private heroService: HeroService) { }
getHeroes() {
this.HeroService.getHeroes().then(heroes => this.heroes = heroes);
}
}
и...
class Car {
constructor(engine, tires, doors){
this.engine = engine;
this.tires = tires;
this.doors = doors;
}
}
Я не понимаю, почему и когда нужно создать constructor()
в angular 2/typescript (я прочитал официальную документацию, где они создают конструктор для Injection Dependency и для служб).
Ответы
Ответ 1
Конструкторы определяют, какие параметры необходимо предоставить при создании экземпляров ваших объектов. В TypeScript вы также можете добавить модификаторы, такие как private
или public
, чтобы определить в тех же свойствах класса времени и установить их значения с предоставленными.
Например:
class Car {
constructor(private engine:string, private tires:string, private doors:number){
}
}
похож на:
class Car {
constructor(engine:string, tires:string, doors:number){
this.engine = engine;
this.tires = tires;
this.doors = doors;
}
}
В Angular2 конструкторы используются для инъекции зависимостей. Соответствующий декоратор (@Component
или Injectable
) собирает метаданные (типы или подсказки внутри @Inject
), чтобы определить, что предоставить объекту для создания экземпляра.
Помните, что конструкторы не являются частью жизненного цикла компонента. Свойства можно установить позже Angular2 на этом уровне...
Ответ 2
Конструкторы контроллера в основном используются для инъекций/услуг зависимостей, как вы упомянули, а также (в моих приложениях) для инициализации сложных значений по умолчанию, основанных на самих сервисах. Поскольку конструктор работает до того, как шаблон контроллера инициализирован - никакие переменные не будут отображаться точно, следовательно, необходимость в ngOnInit
и других подобных методах. Эти методы "bootstrap" должны использоваться для выполнения обычных "конструктивных" обязанностей, чтобы шаблон/представление могли обращаться к данным.
Что касается конструкторов служб, некоторые из моих компонентов обычно используют конструктор и инициализируют различные части службы на основе существующих пользовательских данных, поскольку они действуют намного больше, чем стандартные классы.
Эти ответы помогут: