Angular 14+中ProvidedIn: 'any'已弃用,求合适替代方案
Angular 14+ 中
providedIn: 'any' 的替代方案 providedIn: 'any' 的原行为是:所有预加载模块共享同一个服务实例,每个懒加载模块拥有独立的服务实例,该配置在Angular 14+已被弃用,以下是精准复刻原行为的替代方案:
具体实现步骤
- 配置服务的根注入器共享实例:将服务的
providedIn设置为'root',这样所有预加载模块会自动共享根注入器中的服务实例 - 为懒加载模块声明独立实例:在每个需要独立实例的懒加载模块的
providers数组中显式添加该服务,Angular会为这个懒加载模块创建专属的服务实例
代码示例
服务定义
import { Injectable } from '@angular/core'; @Injectable({ providedIn: 'root' // 预加载模块共用根实例 }) export class SharedService { // 服务业务逻辑 }
懒加载模块配置
import { NgModule } from '@angular/core'; import { CommonModule } from '@angular/common'; import { SharedService } from '../shared.service'; @NgModule({ imports: [CommonModule], providers: [SharedService] // 该懒加载模块拥有独立实例 }) export class LazyFeatureModule { }
补充说明
这种方式完全匹配providedIn: 'any'的原有行为逻辑,唯一区别是需要手动在懒加载模块中注册服务,也规避了原配置行为不够直观的问题——这也是Angular官方弃用any的原因之一。
内容的提问来源于stack exchange,提问作者skouch2022
相关产品推荐
相关产品推荐

