您可以使用解析器将数据发送到路由。我已经稍微修改了代码,以便您可以参数化哪些服务可以发送到哪个路由。我不是说这是最好的方法,但你可以试试这个。您甚至可以维护自定义的服务存储,而不是像 serviceResolvers.ts 中所做的那样每次都实例化。
StackBlitz
//// app-routing.module.ts
import { NgModule } from '@angular/core';
import { RouterModule, Routes } from '@angular/router';
import {
Service1Resolver,
Service2Resolver,
} from '../component/serviceResolvers';
import { TemplateComponent } from '../component/template.component';
import { AppComponent } from './app.component';
const routes: Routes = [
{
path: '',
redirectTo: 'home',
pathMatch: 'full',
},
{
path: 'template',
component: TemplateComponent,
resolve: {
service: Service1Resolver, // Customize your service
},
},
{
path: 'template2',
component: TemplateComponent,
resolve: {
service: Service2Resolver,
},
},
];
@NgModule({
imports: [RouterModule.forRoot(routes)],
exports: [RouterModule],
providers: [Service1Resolver, Service2Resolver],
})
export class AppRoutingModule {}
/// serviceResolvers.ts
import { Injectable } from '@angular/core';
import {
ActivatedRouteSnapshot,
Resolve,
RouterStateSnapshot,
} from '@angular/router';
import { Service1Service } from './service1.service';
import { Service2Service } from './service2.service';
@Injectable()
export class Service1Resolver implements Resolve<any> {
resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) {
return new Service1Service();
}
}
@Injectable()
export class Service2Resolver implements Resolve<any> {
resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) {
return new Service2Service();
}
}