Извините за название, не знаю, как это объяснить!
У меня магазин настроен так ...
import { BehaviorSubject } from 'rxjs/BehaviorSubject';
import 'rxjs/add/operator/distinctUntilChanged';
import 'rxjs/add/operator/pluck';
import { Observable } from 'rxjs/Observable';
import { State } from './state';
const state: State = {
flowers: null,
insects: null,
colours: null
};
export class Store {
private subject = new BehaviorSubject<State>(state);
private Store = this.subject.asObservable().distinctUntilChanged();
get value() {
return this.subject.value;
}
select<T>(name: string): Observable<T> {
return this.Store.pluck(name);
}
set(name: string, state: any) {
this.subject.next({
...this.value, [name]: state
});
}
}
теперь у меня есть сервисный вызов, который получает много данных, а затем сортирует их по разным массивам, а затем обновляет различные объекты состояния в хранилище, как, например,
getData() {
this._service.getAllData()
.subscribe((result) => {
this.storeData(result);
}
}
storeData(data: any) {
let flowers = [];
let insects = [];
let colours = [];
data.forEach((item) => {
switch(item.type) {
case 'flower':
flowers.push(item);
break;
case 'insect':
insects.push(item);
break;
case 'colour':
insects.push(item);
break;
}
})
this._store.set('flowers', flowers);
this._store.set('insects', flowers);
this._store.set('colours', flowers);
}
Теперь, что происходит, я подписываюсь на цвета, например, вот так
getColours() {
this._store.select('colours')
.subscribe((result) => {
console.log(result);
})
}
Я получаю console.log()
3 раза, потому что я обновляю различные элементы состояния в магазине 3 раза в функции storeData ... это правильно ?? У меня сложилось впечатление, что состояние 'colors' будет обновлено и, таким образом, вызовет подписку, если было обновлено 'colors', а не состояние в магазине ??
Я что-то не так делаю ??
Буду признателен за любую помощь!