Angular Observable在后续的下一次调用中不会触发订阅功能

时间:2018-02-16 16:58:49

标签: angular typescript observable

我使用服务和来自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();
    }
}

1 个答案:

答案 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);
    }
}