角度组件和帮助程序服务或帮助程序类

时间:2018-02-08 12:11:54

标签: angular

我是角度5的新手。

我正在尝试构建具有大量逻辑的组件,这些逻辑可以准备数据以便能够以HTML格式显示。

据我所知 - 这个逻辑应该从组件移动到其他地方,以免触发变更跟踪。(正如风格指南中的here所示)

我这个地方应该是服务员还是助手班? 如果是服务,是否应该将其添加到提供商'该组件的组件模块或“提供商”的组件组件本身?

@Component({
    selector: 'filters-bar',
    templateUrl: './filters-bar.component.html',
    styleUrls: ['./filters-bar.component.scss'],
    providers:[FiltersFromQueryService]
})

由于

1 个答案:

答案 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的提供者