我會盡我所能地解釋這一點。Angular2接下來從子對象中調用觀察者
我有一個服務,它包含一個可執行任務以更新自身的可觀察類。該可觀察類需要使用位於服務中的觀察者推送到應用程序。我怎樣才能從小孩那裏調用這個觀察者而不創建某種依賴性循環?
這裏是一個粗略的例子:
class MyService {
subClass$: Observable<SubClass>;
_subClassObserver: Observer<SubClass>;
constructor(private _subClassStore: SubClass){
this.subClass$ = new Observable(observer => {
this._subClassObserver = observer
}).share();
}
pushData(){
this._subClassObserver.next(this._subClassStore)
}
}
class SubClass {
displayData: string;
displayData2: number;
constructor(){
socket.on('setData', function(obj){
this.displayData = obj.dd1;
this.displayData2 = obj.dd2;
//How to call pushData() in MyService from here to push data to app?
}
}
}
_subClassStore通過從socket.io進來流更新。如何讓MyService知道SubClass數據何時更改,以便可以使用_subClassObserver.next(_subClassStore)推送它?
編輯: 我在上面的例子中增加了更多的細節,以顯示它們是如何相關和利用。
SubClass只是來自socket.io的數據流的監聽器,並將信息保存到類中。它在構建MyService時開始監聽。
MyService的目標是提供這些可以在整個應用程序中訂閱的子類。每個人都可以訪問不同的數據流和相關數據,但所有數據都將包含在單個服務中。
問題是如何在父級調用pushData()函數,以便保持應用程序中訂戶的流更新。
編輯2:
這可能會有幫助。下面是如何將它寫成沒有子類的服務。我不這樣做的唯一原因是因爲有大量這些監聽器被存儲到Observables並將它們抽象爲類使信息更易於管理,但將其推送到應用程序是我無法想象的出:
class MyService {
class1$: Observable<DataStream>;
_class1Observer: Observer<DataStream>;
_class1Store: DataStream;
constructor(){
this._class1store = {displayData: 'hello', displayData2: 0};
this.class1$ = new Observable(observer => {
this._class1Observer = observer
}).share();
socket.on('setData', function(obj){
this._class1Store.displayData = obj.dd1;
this._class1Store.displayData2 = obj.dd2;
this._class1Observer.next(this._class1Store)
}
}
interface DataStream = {
displayData: string;
displayData2: number;
}
我猜你需要提供有關這些組件是如何相關的更多上下文的引用。 –
我提供了一些信息。這可能有點太複雜,沒有一個實質性的代碼示例來解釋,所以如果它仍然沒有任何意義,只要讓我知道,我會刪除它,以防止混淆他人。 – BrentShanahan