0

次のようなサービスがあります。

@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]);
    }
}

そして、私は次のような複数のコンポーネントに注入しています。

@Component({
  selector: 'my-list',
  templateUrl: './my-list.component.html'
})
export class MyListComponent implements OnInit, OnDestroy {

    constructor(private service: BoxContainerService) {     
    }

    ngonInit(){     
    }  
}

しかし、ルートが変更されるたびに BoxContainerService の新しいインスタンスを取得したいと考えています。ページを更新すると、新しいインスタンスが作成されます。しかし、MyList_page から B_page にルーティングし、再び MyList_page にルーティングすると、box$ カウントが増加します。モジュール中にサービスインスタンスを再作成したい。モジュールを別のモジュールにインポートするためです。

4

2 に答える 2

1

サービスの @Injectable から providedIn を削除できます

@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 の新しいインスタンスが作成されます (あなたの場合は、ルーティングされたとき)。

于 2020-06-08T11:18:28.023 に答える