2017-01-25 46 views
7

我正在构建一个暴露Observable的服务。在这个服务中,我接收外部函数调用,它应该触发Observable上的下一个调用,以便各种消费者获得订阅事件。在Observer构造函数中,我可以调用next,并且一切都很好,但是如何在构造函数的外部访问此外部触发器以便触发下一个调用?Angular2 Observable - 如何从Observable的构造函数的外部调用下一个

private myObservable$: Observable<any>; 

在服务初始化我做

this.myObservable$ = new Observable(observer => { 
    observer.next("initial message"); 
} 

然后在相同服务的其他方法,我希望能够像

this.myObservable$.observer.next("next message"); 

以上显然是行不通的执行什么,但我怎样才能实现这个目标?

我假设我失去了一些东西基本因为必须有发射可观察到的初始构造之外更多的消息

回答

9

你应该创建为

this.myObservable$ = new Subject(); 

然后一个Subject方式你可以在任何时候拨打:

this.myObservable$.next(...); 

或者使用订阅:

this.myObservable$.subscribe(...) 
+0

哈亮,谢谢!我知道我错过了一些基本的东西。像现在的魅力一样工作...... –

2

两种方式:

  1. 让myObservable $市民:

    public myObservable$: Observable; 
    
  2. 封装观察到受试者中的数据流,并提供了一个帮手调用next:

    export class TestService { 
        public myObservable$: Observable; 
        private _myObservableSubject: Subject; 
    
        constructor() { 
        this._myObservableSubject = new Subject(); 
        this.myObservable$ = this._myObservableSubject.asObservable(); 
        } 
    
        public NextMessage(message?: string): void { 
        this._myObservableSubject.next(message); 
        } 
    } 
    
+0

感谢Boyan,第二个看起来像是可以工作,但是我正在与olsn的回答上面,似乎更简洁。 –

+0

当然,我们正在谈论同样的事情。我从阅读Angular 2文档中得到了答案。具体来说,这一部分,https://angular.io/docs/ts/latest/cookbook/component-communication.html#!#bidirectional-service –

相关问题