2016-05-18 3 views
19

Вот несколько примеров Конструкторы из Angular 2 docs:Когда создавать конструктор в машинописном тексте Angular2?

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; 
    } 
} 

Я не понимаю, почему и когда, чтобы создать в угловом 2/машинописи в constructor() (Я прочитайте официальную документацию, где они создают конструктор для Injection Dependency и для сервисов).

+1

+1. Я изо всех сил стараюсь понять, что должно быть в конструкторе (кроме как можно меньше), а что нет. Я предполагаю, что это более широкая концепция программирования, но мое чтение не дало ничего особенно ясного, которое описывает конструкторы и их назначение простым способом. – Dan

+0

Привет, Sarvesh. Это может быть лучше для других, если вы вставляете свой код в виде текста. –

+0

@ J.Chomel Я думаю, теперь его лучше :) –

ответ

23

Конструкторы определяют, какие параметры, чтобы обеспечить, когда экземпляр ваших объектов. В 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 на этом уровне ...

+0

См. [Этот пример] (https://www.typescriptlang.org/play/#src=class%20Rectangle%20%7B%0D%0A%20%20constructor (private% 20height% 3Anumber% 2C% 20private% 20width% 3Anumber)% 7B% 0D% 0A% 20% 20% 7D% 0D% 0A% 7D) на игровой площадке TypeScript для примера, с которым вы можете играть. – dayuloli

3

Конструкторы контроллера в основном используются для инъекций/услуг зависимостей, как вы упомянули, а также (в моих приложениях) для инициализации сложных значений по умолчанию, основанных на самих сервисах. Поскольку конструктор работает до того, как шаблон контроллера инициализируется, переменные не будут отображаться точно, поэтому необходимо, чтобы ngOnInit и другие подобные методы. Эти методы «bootstrap» должны использоваться для выполнения обычных «конструктивных» обязанностей, чтобы шаблон/представление могли обращаться к данным.

Что касается конструкторов служб, то некоторые из моих компонентов обычно используют конструктор и инициализируют различные части службы на основе существующих пользовательских данных, поскольку они действуют намного больше, чем стандартные классы.

Эти ответы будут полезны: