假设你有一个简单的 BehaviorSubject
this.countryOfBirth$ = new BehaviorSubject<CountryEnum>(null);
get countryOfBirth() {
return this.countryOfBirth$.value;
};
set countryOfBirth(val: CountryEnum) {
this.countryOfBirth$.next(val);
};
这样做instance.countryOfBirth
会返回最后一个值instance.countryOfBirth = CountryEnum.US
并将新值推送到主题。
我遇到的问题是我将此主题实例传递给自定义模型驱动的表单模块,默认情况下该模块会错误地传递字符串而不是我的CountryEnum
类的实例。
我可以在表单模块中解决此问题,但我希望尽可能将其与任何特定于应用程序的逻辑分离,以便在 BehaviorSubject 实例本身中实现修复更有意义。
我的问题是:在触发其订阅者之前,是否有钩子或任何其他方式对每个“下一个”值应用一些更改?换句话说,在我的代码完成之后
instance.countryOfBirth = CountryEnum.US;
在触发任何订阅者之前,我想检查该值是否为字符串(例如:US),如果是,我想获取相应的 CountryEnum 实例并将其传递给“下一个”调用而不是原始的“美国”字符串。
在代码中它看起来像
this.countryOfBirth$.onBeforeNext((val) => {
if (typeof val == "string") {
return CountryEnum.getInstance(val);
} else if (val instanceof CountryEnum) {
return val;
} else {
throw new Error("Unsupported value type");
}
});
但显然onBeforeNext
不存在,我似乎无法在 dox 中找到任何可以做我想做的事情。
您的帮助将不胜感激!