何时在Angular2打字稿中创建构造函数?

Sar*_*dav 22 typescript angular

以下是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);
    }
}
Run Code Online (Sandbox Code Playgroud)

和...

class Car {
    constructor(engine, tires, doors){
        this.engine = engine;
        this.tires = tires;
        this.doors = doors;
    }
}
Run Code Online (Sandbox Code Playgroud)

我不明白为什么以及何时创建一个constructor()角度2 /打字稿(我已经阅读了官方文档,他们为依赖注入和服务创建了一个构造函数).

Thi*_*ier 32

构造函数定义实例化对象时要提供的参数.在TypeScript中,您还可以添加修饰符,例如privatepublic在同一时间类属性中定义,并使用提供的值设置它们的值.

例如:

class Car {
  constructor(private engine:string, private tires:string, private doors:number){
  }
}
Run Code Online (Sandbox Code Playgroud)

类似于:

class Car {
  constructor(engine:string, tires:string, doors:number){
    this.engine = engine;
    this.tires = tires;
    this.doors = doors;
  }
}
Run Code Online (Sandbox Code Playgroud)

在Angular2中,构造函数用于依赖注入.关联的装饰器(@ComponentInjectable)收集元数据(其中的类型或提示@Inject)以确定要对对象进行实例化的内容.

请注意,构造函数不是组件生命周期的一部分.稍后Angular2可以在此级别设置属性...


Sam*_*amV 5

正如您所提到的,控制器构造函数主要用于依赖注入/服务,并且(在我的应用程序中)还用于根据服务本身初始化复杂的默认值。由于构造函数在控制器模板初始化之前运行 - 不会准确呈现变量,因此需要ngOnInit和其他类似的方法。这些“引导”方法应用于执行正常的“构造”职责,以便模板/视图可以访问数据。

关于服务构造函数,我的一些人通常使用构造函数并根据现有用户数据初始化服务的各个部分,因为它们的行为更像标准类。

这些答案将会有所帮助: