我是角度5的新手。
我正在尝试构建具有大量逻辑的组件,这些逻辑可以准备数据以便能够以HTML格式显示。
据我所知 - 这个逻辑应该从组件移动到其他地方,以免触发变更跟踪。(正如风格指南中的here所示)
我这个地方应该是服务员还是助手班? 如果是服务,是否应该将其添加到提供商'该组件的组件模块或“提供商”的组件组件本身?
@Component({
selector: 'filters-bar',
templateUrl: './filters-bar.component.html',
styleUrls: ['./filters-bar.component.scss'],
providers:[FiltersFromQueryService]
})
由于
答案 0 :(得分:2)
如果该类仅在一个Component中使用,则将其用作普通类(辅助类或称为View Object)。您不能将它们注入组件中,但可以在每次初始化时创建新实例:this.viewObject = new ViewObject();
如果它在多个组件中使用,那么它应该在服务中,因此它可以注入多个组件(仅初始化一次,单独)。
提供者通常是单一对象。
当使用@Injectable()进行分配时,这个:
@Component({})
class Cmp {
constructor() {
this.yourService= new YourService(...);
}
}
......可以这样写:
@Component({
..
providers: [YourService]
})
......或者像这样:
@Component({})
class Cmp {
constructor(private yourService: YourService ) {
}
}
单身是否
您提供一个注射器的位数决定了将创建多少个实例(只有在实际请求时才会实例化它们。)
如果您需要整个应用程序的单个实例,那么只需在根组件(或使用bootstrap(AppComponent,[...])提供一次注射,这会导致相同的行为。
如果要为每个组件A创建一个新实例,请将其添加到组件A的提供者