我是 Angular 5 的新手。
我正在尝试构建一个具有大量逻辑的组件,该组件准备数据以便能够在 HTML 中显示。
据我所知 - 这个逻辑应该从组件移动到其他地方,以免触发更改跟踪。(正如 样式指南中所说)
我这个其他地方应该是服务班还是助手班?如果它是服务,是否应该将其添加到该组件的组件模块的“提供者”中,还是添加到组件本身的“提供者”中?
@Component({
selector: 'filters-bar',
templateUrl: './filters-bar.component.html',
styleUrls: ['./filters-bar.component.scss'],
providers:[FiltersFromQueryService]
})
Run Code Online (Sandbox Code Playgroud)
谢谢
如果该类仅在一个组件中使用,则将其用作普通类(辅助类或我称之为“视图对象”)。您不能将它们注入组件中,但可以在每次初始化时创建新实例:this.viewObject = new ViewObject();
如果它在多个组件中使用,那么它应该在服务中,以便可以将其注入到多个组件中(仅初始化一次,单例)。
提供者通常是单调对象。
当使用 @Injectable() 注解时,如下:
@Component({})
class Cmp {
constructor() {
this.yourService= new YourService(...);
}
}
Run Code Online (Sandbox Code Playgroud)
...可以这样写:
@Component({
..
providers: [YourService]
})
Run Code Online (Sandbox Code Playgroud)
...或者像这样:
@Component({})
class Cmp {
constructor(private yourService: YourService ) {
}
}
Run Code Online (Sandbox Code Playgroud)
是否单例
您提供可注入的位置决定了将创建多少个实例(它们仅在实际请求时才会实例化)。
如果您希望整个应用程序有一个实例,则只需在根组件(或使用 bootstrap(AppComponent, [...])提供一次可注入,这会导致相同的行为。
如果您想要每个组件 A 都有一个新实例,则将其添加到组件 A 的提供者中
| 归档时间: |
|
| 查看次数: |
9213 次 |
| 最近记录: |