Angular 如何指定角度服务注入策略?
我有如下服务:Angular 如何指定角度服务注入策略?,angular,angular8,angular-dependency-injection,Angular,Angular8,Angular Dependency Injection,我有如下服务: @Injectable({ providedIn: 'root' }) export class BoxContainerService { private boxBehaviour: BehaviorSubject<any[]> = new BehaviorSubject<any[]>([]); boxes$ = this.boxBehaviour.asObservable(); addBox(b: any) {
@Injectable({
providedIn: 'root'
})
export class BoxContainerService {
private boxBehaviour: BehaviorSubject<any[]> = new BehaviorSubject<any[]>([]);
boxes$ = this.boxBehaviour.asObservable();
addBox(b: any) {
if (!b) return;
this.boxBehaviour.next([...this.boxBehaviour.value, layer]);
}
}
但我想在每次路线改变时都得到BoxContainerService的新实例。刷新页面时,会创建新的Instance。但如果从MyList_页面到B_页面的路由和从MyList_页面到B_页面的路由,则框$count会增加。我想在模块运行期间重新创建服务实例。因为我将在另一个模块中导入该模块。您可以从服务的@Injectable中删除提供的in
@Injectable({
})
您可以在组件级别提供以下服务-
@Component({
selector: 'my-list',
templateUrl: './my-list.component.html',
providers: [ BoxContainerService ]
})
export class MyListComponent implements OnInit, OnDestroy {
constructor(private service: BoxContainerService) {
}
ngonInit(){
}
}
每次在您的案例中创建MyListComponent时,都会创建一个新的BoxContainerService实例,当它被路由到时,当您注入服务时,它将由树上遇到的第一个提供者解决 现在,您可能在模块级别注册了您的服务 您可以创建列表组件或某个父组件,具体取决于为给定服务实现提供者所需的具体内容。这意味着这个组件和所有子组件将把它解析为这个实例,并为组件的每个实例创建一个实例
@Component({
selector: 'my-list',
templateUrl: './my-list.component.html',
providers: [BoxContainerService]
})
export class MyListComponent implements OnInit, OnDestroy {
constructor(private service: BoxContainerService) {
}
ngonInit(){
}
}
这里有很多Angular's DI的例子。服务的作用域可以是全局单例,也可以是模块或组件。谢谢,我更新了帖子。因为我想使用模块级依赖项,所以我将在另一个模块中导入该模块。我正在将多个组件导入服务。
@Component({
selector: 'my-list',
templateUrl: './my-list.component.html',
providers: [BoxContainerService]
})
export class MyListComponent implements OnInit, OnDestroy {
constructor(private service: BoxContainerService) {
}
ngonInit(){
}
}