Angular 当使用@ngrx/store时,这是访问类内状态变量的正确方法吗?

Angular 当使用@ngrx/store时,这是访问类内状态变量的正确方法吗?,angular,typescript,rxjs,ngrx-store,Angular,Typescript,Rxjs,Ngrx Store,我有一个服务需要根据AppState中存储的变量值做出决策。以下是我的服务的简化版: 从'@angular/core'导入{Injectable}; 导入{Store,从'@ngrx/Store'中选择}; 接口应用状态{ foo:布尔; } @可注射() 导出类提供程序{ 私有isFoo:boolean; 构造函数(私有存储:存储){ //是福吗? store.pipe(选择('foo')).subscribe((foo:boolean)=>{ this.isFoo=foo; }); } is

我有一个服务需要根据
AppState
中存储的变量值做出决策。以下是我的服务的简化版:

从'@angular/core'导入{Injectable};
导入{Store,从'@ngrx/Store'中选择};
接口应用状态{
foo:布尔;
}
@可注射()
导出类提供程序{
私有isFoo:boolean;
构造函数(私有存储:存储){
//是福吗?
store.pipe(选择('foo')).subscribe((foo:boolean)=>{
this.isFoo=foo;
});
}
isItFoo=():string=>this.isFoo?“是foo!”:“不,不是foo”;
}
问题:这是使用
@ngrx/store
在应用程序的类中访问和使用存储在
AppState
中的变量的“正确”方式吗?

组件中
我相信我可以将
foo
变量更简单地用于
async
管道,如下所示:

从'@angular/core'导入{Component};
导入{Store,从'@ngrx/Store'中选择};
从“rxjs”导入{Observable};
接口应用状态{
foo:布尔;
}
@组成部分(
选择器:“foo组件”,
模板:`{(foo$| async)?“是foo!”:“不,不是foo”}

` ) 导出类组件{ 私有foo$:可观察; 构造函数(私有存储:存储){ this.foo$=store.pipe(选择('foo')); } }
是否有更好/更容易/更正确的方法来访问类内的状态变量?

如中所述,ngrx中的获取当前值的功能被故意删除,因为它被误用了,现在只有通过黑客才能实现:

function getValue(o) {
  let value;
  o.take(1).subcribe(v => {
    value = v;
  });
  return value;
}
观测值的目的是提供数据流。存储值可以更改,如果使用它的服务未重新实例化,它将继续使用旧值。因此,一旦有一个流,它将被转换并与其他流组合,并且仅在使用它的地方订阅(大多数情况下,这将是一个视图,可以与
async
pipe一起使用)

在这种情况下,它将是:

isItFoo$ = store.pipe(
  select('foo'),
  map((foo: boolean) => foo ? "it's foo!" : 'nope, not foo')
);

非常感谢。只是有这样一个时刻:云层散开,你对事物的运作方式有了顿悟。:)