Я попытаюсь объяснить это как можно лучше.Angular2 call observer next from child object
У меня есть служба, которая содержит наблюдаемый класс, который выполняет задачи для обновления самого себя. Этот наблюдаемый класс нужно выталкивать в приложение, используя наблюдателя, расположенного в службе. Как я могу назвать этого наблюдателя от ребенка, не создавая какой-то цикл зависимостей?
Вот грубый пример:
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)?
EDIT: Я добавил более подробную информацию к приведенному выше примеру, чтобы показать, как они связаны и используются.
SubClass - это только слушатель для потока данных, поступающих из socket.io и сохраняющий информацию в классе. Он начинает прослушиваться при создании MyService.
Цель MyService - предоставить кучу этих подклассов, которые могут быть подписаны через приложение. Каждый из них разрешил бы доступ к другому потоку данных и связанным с ним данным, но все они содержались бы в одной службе.
Вопрос в том, как вызвать функцию pushData() в родительском объекте, чтобы он поддерживал поток для подписчиков в приложении.
Edit 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