从ngrx商店中选择一个对象时,我们不会获得该类的实例,而是具有相同属性的对象。这可以防止调用对象上的函数。
我应该在subscibe函数中创建一个实例吗?我只是想知道我没有找到关于这个主题的任何内容,并想知道什么是最佳做法。
class ItemModel {
name: string;
formatedName() {
return this.name.upperCass(); // always undefined
}
}
class AnyClass {
item: ItemModel;
construtor() {
this.store.select(state => state.item).subscribe(item => this.item = item);
}
func() {
this.item.formatedName();
}
}
答案 0 :(得分:3)
关于您的代码剪切,至少有一个问题:
您需要使用this
作为名称。
formatedName() {
return >>this.<<name.toUpperCase(); // always undefined
}
(不确定这是否只是在你的剪辑中,或者在你的代码中。
但是:一般不建议在商店中安装类实例,但有一些经验法则:
由于您没有提供任何进一步的细节,我必须假设您的具体案例是关于格式化字符串(例如大写),我建议您使用模板管道:
<span>{{item | myFormatToUpperCasePipe}}</span>
我甚至更进一步利用async
- Pipe:
class MyComponent {
item$ = this.store.select(state => state.item);
}
// template:
<span>{{item$ | async | myFormatToUpperCasePipe}}</span>
如果您在模板中不需要此信息,我的问题是:您为什么需要格式化UI中未显示的内容? 但即使在这种情况下,我建议您保留功能模式并使用实用程序方法来转换数据 - 甚至可能作为rxjs-stream的一部分。