我在其他路线上完美导航,但在这条路线上它包含其他路线,如儿童,当我点击"/source/:operatorid"
路线内的编辑按钮时,我注意到两件事:
"/sources"
路由的组件再次渲染。- 导航和锁定 chrome 中有一个无限循环,下一条路线将是
"/sources/:operatorId/edit/:sourceId"
.
现在为什么会发生,我不知道,你能帮我吗?
按照我的代码...
路线:
const routes: Routes = [
{
path: 'login',
component: LoginComponent,
},
{
path: 'dashboard',
component: DashboardComponent,
canActivate: [AuthGuardService],
},
{
path: 'sources',
component: SourceComponent,
canActivate: [AuthGuardService],
runGuardsAndResolvers: 'always',
children: [
{
path: ':operatorId',
component: SourceComponent,
canActivate: [AuthGuardService],
runGuardsAndResolvers: 'always',
children: [
{
path: 'edit/:sourceId',
component: SourceEditComponent,
canActivate: [AuthGuardService],
runGuardsAndResolvers: 'always',
},
{
path: 'links/:linkId',
component: SourceComponent,
canActivate: [AuthGuardService],
runGuardsAndResolvers: 'always',
},
],
},
],
},
{
path: 'novo-source',
component: SourceEditComponent,
canActivate: [AuthGuardService],
},
{
path: '',
pathMatch: 'full',
redirectTo: '/dashboard',
canActivate: [AuthGuardService],
},
];
@NgModule({
imports: [RouterModule.forRoot(routes)],
exports: [RouterModule],
})
export class AppRoutingModule {}
源组件:
@Component({
selector: 'wza-source-page',
templateUrl: './sources.component.html',
styleUrls: ['./sources.component.scss'],
})
export class SourceComponent implements OnInit {
constructor(
private router: Router,
private route: ActivatedRoute,
protected readonly routerStore: RouterStoreService,
protected readonly sourceStore: SourceStoreService,
private sourceService: SourceService,
private toastService: ToastService
) {
this.router.events.pipe(filter(event => event instanceof NavigationEnd)).subscribe(() => {
console.log('Oi');
this.routerStore.isSourceRoute$.subscribe(isSourceRoute => {
if (isSourceRoute) {
this.sourceStore.dispatchGetData();
}
});
});
}
ngOnInit(): void {}
edit(object: ISourceApiDataObject): void {
combineLatest([
this.routerStore.isSourceRoute$,
this.routerStore.isSourceLinksRoute$,
this.routerStore.routerShortUrlSource$,
this.routerStore.routerShortUrlLink$,
this.routerStore.paramOperatorAndLinkId$,
]).subscribe(([isSourceRoute, isSourceLinksRouter, shortUrlSource, shortUrlLink, paramObject]) => {
const routeName = isSourceRoute && !isSourceLinksRouter ? `${shortUrlSource}/` : `${shortUrlLink}/`;
if (isSourceRoute && !isSourceLinksRouter) {
delete paramObject.linkId;
}
this.router.navigate(['/sources/21/edit/1']);
// this.router.navigate(['sources/', paramObject.operatorId, 'edit', object.key], {
// queryParams: { name: object.name },
// });
});
}
}