Angular 15升级后构造函数外访问Store实例报错求助
问题原因
- Angular 15 调整了依赖注入的实例化顺序,构造函数外的类属性初始化会早于构造函数内的依赖注入完成,此时
this.store还未被注入,处于undefined状态,调用select方法自然抛出错误。 - NgRx 15 同步适配了 Angular 的这一变更,不再兼容构造函数外提前访问依赖的写法,强制要求依赖必须在构造函数执行完成后才能被访问。而 Angular 14 + NgRx 13 的版本对这种提前访问的限制更宽松,所以之前不会触发报错。
解决方法
- 将初始化逻辑移至构造函数内:这是最直接的修复方式,把
user变量的赋值逻辑放到构造函数中,此时this.store已完成注入,可正常调用select方法。
示例代码:@Injectable({ providedIn: 'root' }) export class UserService { user$: Observable<User>; constructor(private store: Store<AppState>) { this.user$ = this.store.select(selectUser); } } - 使用
inject()函数初始化依赖:借助 Angular 14+ 提供的inject()函数,可直接在属性声明时获取依赖,无需通过构造函数注入,这种写法符合 Angular 15 的规范。
示例代码:@Injectable({ providedIn: 'root' }) export class UserService { private store = inject(Store<AppState>); user$ = this.store.select(selectUser); }
内容的提问来源于stack exchange,提问作者sai santosh
相关产品推荐
相关产品推荐

