更新存储中的不同状态会调用每个状态以触发订阅Angular 5

时间:2019-01-24 01:58:32

标签: angular typescript rxjs

很抱歉,标题不确定如何解释!

我有一家这样的商店。

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次,因为我在storeData函数中更新了商店中的不同状态项3次...这是正确的吗?我的印象是“颜色”状态只会被更新,因此如果“颜色”状态未更新商店中的任何状态,则称为订阅?

我做错什么了吗?

任何帮助将不胜感激!

0 个答案:

没有答案