Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular 如何指定角度服务注入策略?_Angular_Angular8_Angular Dependency Injection - Fatal编程技术网

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(){     
    }  
}