我使用服务和来自rxjs的Subject在两个组件之间进行通信。 但是对Subject的后续next()调用不会调用我在compoent的subscribe()方法中调用的函数。
在下面的代码中,只有第一次调用component2的methodToSendMessage(),才会调用Component1的doSomething()。 methodToSendMessage()的任何后续调用都不会触发doSomething()方法。
有人可以帮我解释为什么会这样吗?
组件1如下
export class Component1 implements OnInit {
constructor(someService: SomeService) {
}
ngOnInit() {
someService.showMessage()
.subscribe( msg => {
doSomething();
})
}
doSomething(){
//the problem is this function gets called only once.
}
}
组件2如下
export class Component2 implements OnInit {
constructor(someService: SomeService) {
}
methodToSendMessage() {
this.someService.notify(JSON.parse(""));
}
}
我的服务如下
@Injectable()
export class SomeService{
public subject= new Subject<JSON>();
public notify(res: JSON) {
this.subject.next(res);
}
public showMessage(): Observable<JSON> {
return this.subject.asObservable();
}
}
答案 0 :(得分:0)
尝试直接订阅主题
所以component1看起来像
export class Component1 implements OnInit {
constructor(someService: SomeService) {
}
ngOnInit() {
someService.subject
.subscribe( msg => {
doSomething();
})
}
doSomething(){
//the problem is this function gets called only once.
}
}
,您的服务将是
@Injectable()
export class SomeService{
public subject:Subject<any> = new Subject<JSON>();
public notify(res: JSON) {
this.subject.next(res);
}
}