这是因为在取消激活canActivate守卫时,路由无法访问所需的依赖项。为了解决这个问题,您可以使用Resolvers来接收服务端数据。使用Resolver可以在路由保持激活状态时获取数据,并防止从该路由刷新页面时出现500错误。
以下是一个使用Resolver的示例:
在你的路由模块(route.module.ts)中,导入Resolver并在路由中使用它:
import { NgModule } from '@angular/core'; import { Routes, RouterModule } from '@angular/router'; import { MyResolver} from './my-resolver.service'; import { MyComponent} from './my.component';
const routes: Routes = [ { path: 'my-path', component: MyComponent, resolve: { data: MyResolver } } ];
@NgModule({ imports: [RouterModule.forChild(routes)], exports: [RouterModule], providers: [MyResolver] })
export class MyRoutingModule {}
然后,创建Resolver的服务(my-resolver.service.ts):
import { Injectable } from '@angular/core'; import { Resolve } from '@angular/router'; import { MyDataService } from './my-data.service';
@Injectable()
export class MyResolver implements Resolve
resolve(route: ActivatedRouteSnapshot) { return this.dataService.getData(); } }
在这个示例中,MyResolver服务是一个获取数据的服务。在路由中使用resolve选项,我们可以在MyComponent组件中通过ActivatedRoute来访问这个数据。
在MyComponent组件中,接收来自MyResolver服务的数据:
import { Component } from '@angular/core'; import { ActivatedRoute } from '@angular/router';
@Component({
selector: 'my-component',
template: {{ data }}
})
export class MyComponent { constructor(private route: ActivatedRoute) {}
ngOnInit() { this.route.data.subscribe(data => { console.log(data); this.data = data.data; }); } }
在MyComponent组件中,我们订阅ActivatedRoute