使用 Angular,我有一项服务可以共享来自不同组件的一些变量。像这样:
import { Injectable } from "@angular/core";
import { BehaviorSubject } from "rxjs";
@Injectable()
@Injectable({
providedIn: "root"
})
/**
* Service to manage all the global variables in order to use it in different components
*/
export class SharedService {
// Global variable of the path
private rPathSource = new BehaviorSubject(""); // Set up the source
currentRPath = this.rPathSource.asObservable(); // Make it Observable
constructor() {}
/**
* Function to change the global path from a component
* @param path string of the path of the R Folder for the result of the ML
*/
changeRPath(path: any) {
this.rPathSource.next(path);
}
}
然后我从一个组件订阅它。像这样: 组件 1
constructor(private shared: SharedService) {}
ngOnInit() {
this.shared.currentRPath.subscribe(RPath => {
this.currentRPath = RPath;
// HERE I DO A GET REQUEST
});
}
从另一个组件中,我像这样更改变量: 组件 2
this.shared.changeRPath("");
我有一个带有一些按钮的 sidenav 栏,每个按钮都会更改 url 和加载有 ng 内容的组件。
<ng-content></ng-content>
当我按下按钮在组件 1 上重定向时,我订阅了变量并完成了获取请求。一切都很好。
问题是当我按下按钮在组件 2 上重定向时,共享变量会发生变化,因为我在组件 1 上订阅它会再次执行获取请求。确实,get 请求在 subscribe 的回调中。
但奇怪的是组件 1 不再加载,因为它是组件 2。当组件更改时它不应该被销毁?