Sa *_*gin 0 subject rxjs angular
我创建了一个服务,以便从API获取数据并使用Subject从我的组件中获取这些数据(在应用程序初始化时调用LoadTenants):
服务 :
@Injectable()
export class TenantService{
public tenants;
private tenantSubject = new Subject<any>();
constructor(private http: HttpClient) {
}
LoadTenants() {
this.http.get(TENANT_URL).subscribe((data: any) => {
this.tenants = data;
this.setTenants();
});
}
setTenants() {
this.tenantSubject.next(this.tenants);
}
getTenants(): Observable<any> {
return this.tenantSubject.asObservable();
}
getSyncTenants() {
return this.tenants;
}
}
Run Code Online (Sandbox Code Playgroud)
组成部分:
public tenant;
subsciption: Subscription;
constructor(private tenantService: TenantService) { }
ngOnInit() {
this.subsciption = this.tenantService.getTenants().subscribe((datas) => {
this.tenant = datas;
},
error => console.log('Error : ', error)
);
}
}
ngOnDestroy() {
this.subsciption.unsubscribe();
}
Run Code Online (Sandbox Code Playgroud)
第一次加载时一切正常,但是如果我导航到另一个组件并返回到该组件,则不会触发订阅,这会导致模板中的无效数据。
如果要获取最新值,请使用BehaviorSubject
BehaviorSubject将直接向订阅者发出当前值
@Injectable()
export class TenantService{
public tenants;
private tenantSubject = new BehaviorSubject<any>();
constructor(private http: HttpClient) {
}
LoadTenants() {
this.http.get(TENANT_URL).subscribe((data: any) => {
this.tenants = data;
this.setTenants();
});
}
setTenants() {
this.tenantSubject.next(this.tenants);
}
getTenants(): Observable<any> {
return this.tenantSubject.asObservable();
}
getSyncTenants() {
return this.tenants;
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
577 次 |
| 最近记录: |