angular 6 同时订阅来自多个组件的主题不起作用
anugular 6 subscribe to subject from multiple component at a same time not working
我有两个组件(父组件和子组件)和一项服务同时订阅了一个主题 class。但是当主题 class 使用 next
方法发出数据时,只有一个组件(子组件)正在获取数据。
navbar.component.ts :(发件人):
this.messageService.setClientUserAuth(this.respObject.details.actionDtls);
message.service.ts:(订阅者)
constructor(private route: Router, private _rest: RestApiService) {
this.getClientUserAuth().subscribe(auth => {
console.log('AUTH :' + JSON.stringify(auth));
});
}
setClientUserAuth(id: any) {
this.clientUserAuth.next(id);
}
getClientUserAuth(): Observable<any> {
this.clientUserAuth = new Subject<any>();
return this.clientUserAuth.asObservable();
}
base-template.component.ts : (Subscriber) (child)
ngOnInit() {
this.messageService.getClientUserAuth().subscribe(auth => {
console.log('------------>' + JSON.stringify(auth));
});
}
action.component.ts(订阅者)(父)
constructor(private _rest: RestApiService, private messageService: MessageService,
private route: Router, private modalService: NgbModal, notifier: NotifierService) {
this.messageService.getClientUserAuth().subscribe(auth => {
console.log('----::----->' + JSON.stringify(auth));
});
}
当数据来自导航栏组件时,只有基本模板 subscription
函数获取数据,但是如果我从基本模板中删除 subscription
方法,那么 subscription
方法来自操作组件得到它。但我希望所有组件和服务中的数据同时呈现,因为它们都在同一时间呈现 time.How 以实现这一点。
修改您的服务方法,从方法中删除主题的初始化 "getClientUserAuth()",在您定义它的地方初始化您的可观察对象(也可能您想将其设为私有):
private _clientUserAuth = new Subject<any>();
getClientUserAuth(): Observable<any> {
return this._clientUserAuth.asObservable();
}
setClientUserAuth(id: any) {
this._clientUserAuth.next(id);
}
每次任何组件通过 getClientUserAuth()
的 return 调用订阅时,您最终都会创建一个新主题。
我有两个组件(父组件和子组件)和一项服务同时订阅了一个主题 class。但是当主题 class 使用 next
方法发出数据时,只有一个组件(子组件)正在获取数据。
navbar.component.ts :(发件人):
this.messageService.setClientUserAuth(this.respObject.details.actionDtls);
message.service.ts:(订阅者)
constructor(private route: Router, private _rest: RestApiService) {
this.getClientUserAuth().subscribe(auth => {
console.log('AUTH :' + JSON.stringify(auth));
});
}
setClientUserAuth(id: any) {
this.clientUserAuth.next(id);
}
getClientUserAuth(): Observable<any> {
this.clientUserAuth = new Subject<any>();
return this.clientUserAuth.asObservable();
}
base-template.component.ts : (Subscriber) (child)
ngOnInit() {
this.messageService.getClientUserAuth().subscribe(auth => {
console.log('------------>' + JSON.stringify(auth));
});
}
action.component.ts(订阅者)(父)
constructor(private _rest: RestApiService, private messageService: MessageService,
private route: Router, private modalService: NgbModal, notifier: NotifierService) {
this.messageService.getClientUserAuth().subscribe(auth => {
console.log('----::----->' + JSON.stringify(auth));
});
}
当数据来自导航栏组件时,只有基本模板 subscription
函数获取数据,但是如果我从基本模板中删除 subscription
方法,那么 subscription
方法来自操作组件得到它。但我希望所有组件和服务中的数据同时呈现,因为它们都在同一时间呈现 time.How 以实现这一点。
修改您的服务方法,从方法中删除主题的初始化 "getClientUserAuth()",在您定义它的地方初始化您的可观察对象(也可能您想将其设为私有):
private _clientUserAuth = new Subject<any>();
getClientUserAuth(): Observable<any> {
return this._clientUserAuth.asObservable();
}
setClientUserAuth(id: any) {
this._clientUserAuth.next(id);
}
每次任何组件通过 getClientUserAuth()
的 return 调用订阅时,您最终都会创建一个新主题。