我已经声明了一个服务中的主题,并尝试通过使用“subject.next()”对后端进行 GET 调用来推送响应。还使用“subject.asObservable()”为该主题分配了一个可观察对象并订阅两个不同组件(父级和路由器出口子级)中的 observable。问题是 observable 只为一个订阅者而不是为两个订阅者发出新值。
服务
subject = new Subject<any>();
observable = this.subject.asObservable();
public getDetails(id) {
return this.http.get(this.url.concat(id))
.pipe(map(data => this.extractDetails(data),
catchError(err => this.handleError(err)));
}
public extractDetails(data){
this.subject.next(data);
return data;
}
父组件
ngOnInIt(){
this.hitUrl();
}
getDetails(){
this.service.observable.subscribe(
(data: any) => {
console.log(data);
},
err => {
console.error(err);
}
)
}
hitUrl(id: string) {
this.service.getDetails(id).subscribe(
(data: any) =>
if(!!data){
console.log(data);
this.getDetails();
}
},
err => {
console.log(err);
}
);
}
路由器出口子组件
ngOnInIt(){
this.hitUrl();
}
getDetails(){
this.service.observable.subscribe(
(data: any) => {
console.log(data);
},
err => {
console.error(err);
}
)
}
hitUrl(id: string) {
this.service.getDetails(id).subscribe(
(data: any) =>
if(!!data){
console.log(data);
this.getDetails();
}
},ngOnInIt(){
this.hitUrl();
}
getDetails(){
this.service.observable.subscribe(
(data: any) => {
console.log(data);
},
err => {
console.error(err);
}
)
}
hitUrl(id: string) {
this.service.getDetails(id).subscribe(
(data: any) =>
if(!!data){
console.log(data);
this.getDetails();
}
},
err => {
console.log(err);
}
);
}
err => {
console.log(err);
}
);
}
在组件中,hitUrl() 也会在执行调用操作时触发,然后我需要 observable 向两个订阅者发出最新数据(如果调用操作是从父级或路由器出口子级执行的)。