angular – 使用ngrx获取商店的当前状态一次
发布时间:2020-12-17 17:32:42 所属栏目:安全 来源:网络整理
导读:嗨,我想知道是否有人知道如何获得商店的当前状态,而无需订阅它.我目前正在使用ngrx来订阅商店并访问其状态来设置组件的属性,但是因为我订阅了这个属性,所以它不断刷新.所以我正在寻找一种获取此属性的方法,以便我可以在不经常刷新的情况下显示数据. 以防万一
嗨,我想知道是否有人知道如何获得商店的当前状态,而无需订阅它.我目前正在使用ngrx来订阅商店并访问其状态来设置组件的属性,但是因为我订阅了这个属性,所以它不断刷新.所以我正在寻找一种获取此属性的方法,以便我可以在不经常刷新的情况下显示数据.
以防万一,这发生在我的组件的构造函数中. 我一直在尝试这样的事情: _store.select( ‘storeData.correlationData’); 订阅时我会这样访问: _store.subscribe( (state) => { this.correlationData = state.storeData.correlationData; } ); 编辑 申请状态: export interface ApplicationState { uiState: UiState; storeData: StoreData; } 解决方法
您可以创建getState()函数,将其放在共享模块中并在需要时导入.关键是使用take(1)运算符使其同步:
export function getState(store: any,selector: string) { let _state: any; store.take(1).subscribe(o => _state = o); return _state; } 这是我正在使用的更高级的版本: export function getState(store: any,selector?: any) { let _state: any; let state$: any; if (typeof selector === 'string' && /./g.test(selector)) { state$= store.pluck(...selector.split('.')); } else if (typeof selector === 'string') { state$= store.map(state => state[selector]); } else if (typeof selector === 'function') { state$= store.map(state => selector(state)); } else { state$= store; } state$.take(1) .subscribe(o => _state = o); return _state; } 有了这个,您可以通过几种不同的方式获得状态: getState(this.store) // all data in Store getState(this.store,'users') getState(this.store,state => state.users) getState(this.store,'users.address.street') // Cool! 谨慎使用! 正如@Maximes在评论中指出的那样,您应该尝试在代码中直接使用Observables并使用此方法进行测试. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |