很抱歉,标题不确定如何解释!
我有一家这样的商店。
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次...这是正确的吗?我的印象是“颜色”状态只会被更新,因此如果“颜色”状态未更新商店中的任何状态,则称为订阅?
我做错什么了吗?
任何帮助将不胜感激!