Вы можете установить подписку RxJs в ngOnInit
.
ngOnInit() {
this.store.toRx(this.store, 'counter')
.subscribe(val => this._counter = val)
}
toRx
- это удобная функция, которую можно добавить в магазин.
Она использует функцию Mobx observe()
, котораяпросто активирует обратный вызов каждый раз, когда указанный элемент изменяется.
import { Injectable } from '@angular/core';
import { action, observable, observe } from 'mobx';
import { Observable } from 'rxjs';
@Injectable()
export class Store {
...
toRx(obj, prop) {
return Observable.create(observer =>
observe(obj, prop, (change) => observer.next(change.newValue), true)
);
}
}
Если у вас есть глубоко вложенное свойство, на которое вы хотите подписаться, например,
@Injectable()
export class Store {
...
@observable counterWrapper = { counter: 0 };
, просто измените первый параметр toRx
this.store.toRx(this.store.counterWrapper, 'counter')
.subscribe(val => this._counter = val)