2 回答
TA贡献1878条经验 获得超4个赞
我认为约瑟夫的想法是要走的路。
这是我如何实现它:
class FooService {
private _newEvents = new Subject();
newEvents$ = this._newEvents.asObservable();
addNewEvent (ev) {
this._newEvents.next(e);
}
}
// Allow `A` class to communicate with `B` class
class A {
addEvent (ev) {
this.fooService.addNewEvent(ev);
}
}
class B {
private subscription: Subscription;
ngOnInit () {
this.subscription = this.fooService.newEvents$
.subscribe(e => {})
}
ngOnDestroy () {
this.subscription.unsubscribe();
}
}
请注意,如果您的B类订阅了多个 observable,您应该使用takeUntil等解决方案取消订阅它们。
TA贡献2003条经验 获得超2个赞
Observables/Subjects是一种方式。您将Subject在服务中拥有一个,并使用.next(value)它来交换价值。每个对该值感兴趣的组件都可以订阅该主题。
示例:(取自RxJS 文档
//your Service
import { Subject } from 'rxjs';
const subject = new Subject<number>();
//Component A (and others as well)
service.subject.subscribe({
next: (num) => console.log(num)
});
//this should work as well with prettier syntax:
service.subject.subscribe(sum =>
console.log(num)
);
//Component B
service.subject.next(7) //passing number 7 to Component A
每当您创建订阅时,请务必始终取消订阅!否则,您最终可能会收到成堆的订阅,这些订阅将在同一个组件中同时触发。
根据个人经验,如果可能的话,我发现将任何可以被视为全局的函数和变量外包到专用服务中更有帮助。如果您直接从您的组件中读取服务的变量(并在必要时修改它们),您将获得相同的效果。只要您保持适当的服务结构,这就会起作用。全球使用的专用服务的一些示例是:
翻译 (
TranslationService
)权限管理 (
PermissionService
)
添加回答
举报