angular - anugular 6同时从多个组件订阅主题不起作用
问题描述
我有两个组件(父级和子级)和一个服务,它们同时订阅了一个主题类。但是当主题类使用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 :(订阅者)(孩子)
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
操作组件中的方法获取它。但是我希望所有组件和服务中的数据同时呈现,因为它们都同时呈现。如何实现这一点。
解决方案
修改您的服务方法,从方法“getClientUserAuth()”中删除主题的初始化,在定义它的位置初始化您的 observable(也可能是您希望将其设为私有):
private _clientUserAuth = new Subject<any>();
getClientUserAuth(): Observable<any> {
return this._clientUserAuth.asObservable();
}
setClientUserAuth(id: any) {
this._clientUserAuth.next(id);
}
每次任何组件调用 subscribe 的返回时getClientUserAuth()
,您最终都会创建一个新主题。
推荐阅读
- r - 为每个条形创建具有不同颜色的绘图条形图
- dynamic - 如何加快 UI Server 更新并允许触发动态 DAG 的时间?
- android - Android 全屏片段不显示导航和状态栏后面的元素
- android - 谷歌私有应用在外部组织关闭测试
- google-chrome - Chrome 中的第三方 Cookie
- html - 将可编辑的 Google 表格嵌入网站
- python-3.x - 如何将此按钮与其上方的其他列对齐?
- javascript - Kendo UI ListBox 删除取决于树视图检查
- azure-devops - Azure python 创建用户数据库
- amazon-route53 - Route 53 上的 DNS CNAME 记录不重定向