我正在尝试在我的组件之间进行某种通信,所以我在这样的组件中使用带有BehaviorSubject和Subscription的服务:
服务(与问题相关的代码):
this._api.updateClientModalAction(id)
组件A:
import { Subscription } from 'rxjs/subscription'
private _subscription: Subscription
ngOnInit() { this._subscription = this._api.modalAction$.subscribe(res => {
this.refreshModal(res)
console.log('received')
})}
组件B:
<router-outlet>
如果组件B是组件A的子组件,这是完美的工作,但如果A是根组件而B在其sent
内(或相反),则没有收到任何订阅,我只得到{控制台中的{1}}。
我做错了什么?
答案 0 :(得分:21)
问题比我想象的要简单,我没有在更高级别上使用该服务,我不应该在每个组件中使用providers: [ApiService]
,而应该只在更高的根组件上
我希望这会对某人有所帮助。
https://github.com/angular/angular/issues/11618#event-790191142
答案 1 :(得分:0)
如果要在组件之间共享内容。
providers: [ApiService]
。答案 2 :(得分:0)
除了必须使用的答案
@Injectable({
providedIn: 'root'})
以便在根目录上加载服务。
答案 3 :(得分:0)
在我的例子中订阅没有发生是因为内部函数中的一个无提示错误:
ngOnInit(): void {
this.infoService.entries.asObservable().subscribe(
entries => {
this.entryBody = entries[0].body;
});
}
当我用支票包裹这一行时,它就开始工作了:
if (entries.length > 0) {
this.entryBody = entries[0].body;
}
澄清一下:控制台中没有关于数组索引失败的错误消息。