你说得对.你仍然可以provide:
@Injectable({
providedIn: 'root'
})
export class MyService {}
@NgModule({
declarations: [SomeComponentThatDependsOnMyService],
providers: [MyService]
})
export class MyFeatureModule {}
const featureRoutes = [
{
path: '',
children: [
{ path: 'a', loadComponent: () => import('./a.component.ts').then(c => c.AComponent) },
{ path: 'b', loadComponent: () => import('./b.component.ts').then(c => c.BComponent) },
],
providers: [MyService]
},
] as Routes;
const appRoutes = [
{
path: 'feature',
loadChildren: () => featureRoutes,
providers: [MyOtherService]
},
{ path: '**', component: NonFeatureComponent },
] as Routes;
bootstrapApplication(App, {
providers: [
provideRouter(appRoutes)
]
});
@Component({
selector: 'app-isolated',
standalone: true,
providers: [MyService]
})
export class MyIsolatedComponent {}
提供这些服务的地点有a hierarchy个,提供某项服务的"正确"地点取决于以下因素:
- 有多少组件或其他服务需要共享您的服务的同一实例
- 有多少组件或其他服务应该知道您的服务
- 您的服务实际应该实例化的时间(是在应用程序启动时需要还是仅在加载了特定的路由/组件之后才需要?)
但使用@Injectable({ providedIn: 'root' })
是提供服务的still the preferred method,因为它允许不使用的树摇动服务.我敢打赌,您建议的Route.providers
在延迟加载的路由(loadComponent()
或loadChildren(Routes)
)中是第二个首选,但文档并没有明确说明这一点.