【问题标题】:anugular 6 subscribe to subject from multiple component at a same time not workingangular 6同时从多个组件订阅主题不起作用
【发布时间】:2019-04-25 19:24:56
【问题描述】:

我有两个组件(父组件和子组件)和一个服务,它们同时订阅了一个主题类。但是当主题类使用next 方法发出数据时,只有一个组件(子组件)正在获取数据。

navbar.component.ts :(sender):

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方法获取数据。但我希望所有组件和服务中的数据同时呈现,因为它们都同时呈现。如何实现。

【问题讨论】:

    标签: angular subject-observer


    【解决方案1】:

    修改您的服务方法,从方法“getClientUserAuth()”中删除主题的初始化,在定义它的位置初始化您的 observable(也可能是您希望将其设为私有):

    private _clientUserAuth = new Subject<any>();
    getClientUserAuth(): Observable<any> {
       return this._clientUserAuth.asObservable();
    }
    
    setClientUserAuth(id: any) {
       this._clientUserAuth.next(id);
    }
    

    每次任何组件通过 getClientUserAuth() 的返回调用订阅时,您最终都会创建一个新主题。

    【讨论】:

      猜你喜欢
      • 2023-03-22
      • 1970-01-01
      • 2020-12-13
      • 2018-08-14
      • 1970-01-01
      • 1970-01-01
      • 2019-12-04
      • 2019-07-05
      • 1970-01-01
      相关资源
      最近更新 更多