Обновление различных состояний в магазине вызывает каждое состояние для запуска подписки Angular 5 - PullRequest
0 голосов
/ 24 января 2019

Извините за название, не знаю, как это объяснить!

У меня магазин настроен так ...

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', а не состояние в магазине ??

Я что-то не так делаю ??

Буду признателен за любую помощь!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...