我有一个关于以编程方式路由器在组件内导航的模糊问题。我真的搜索了很多有用的解决方案,但不幸的是我没有得到它。承认...我不是一个有角度的专家,因为我还在学习
简而言之。我有一个AppRoutingModule:
....
export const routes: Routes = [
{
path: '',
redirectTo: 'search',
pathMatch: 'full'
},
{
path: 'search',
component: SearchComponent,
children: [
{
path: 'allgarchiv',
component: AllgarchivComponent,
outlet: 'search'
}
]
}
];
@NgModule({
imports: [RouterModule.forRoot(routes)],
exports: [RouterModule]
})
export class AppRoutingModule { }
总之,我有两个路由器插座,主要的一个和一个叫做#34;搜索" (s。上面)。
在加载SearchComponent期间(有效!)我想路由到路径" allgarchiv" (s。上面; router-outlet ="搜索")自动。
import { AfterContentInit, AfterViewInit, Component, OnInit } from '@angular/core';
import { ActivatedRoute, Router } from '@angular/router';
@Component({
selector: 'axa-search',
template: `
<br>
<ngb-tabset>
<ngb-tab title="Suche" id="tab-search">
<ng-template ngbTabContent>
<!-- <a [routerLink]="[{ outlets: { search: ['allgarchiv'] } }]">Test_LoadRouter</a> -->
<router-outlet name="search"></router-outlet>
</ng-template>
</ngb-tab>
<ngb-tab id="tab-list" [disabled]="false" title="Treffer">
<ng-template ngbTabContent>TO FILL!!!</p>
</ng-template>
</ngb-tab>
</ngb-tabset>
`,
styles: []
})
export class SearchComponent implements AfterContentInit {
constructor(private router: Router, private route: ActivatedRoute) { }
ngAfterContentInit() {
// this.router.navigate( ['allgarchiv', { outlets: { search: { relativeTo: this.route }}}] );
this.router.navigate( [{ outlets: { search: ['allgarchiv']}}] );
}
}
但这不起作用。我收到以下错误:
错误错误:未捕获(在承诺中):错误:无法匹配任何路由。 网址细分:&#39; allgarchiv&#39;错误:无法匹配任何路由。网址细分: &#39; allgarchiv&#39;
如果您在模板中查看,我也尝试了首先单击Router-Link(Test_LoadRouter;当前注释)。这就像一个魅力!!
我的问题是如何从SearchComponent以编程方式导航到路由器?
我也尝试了不同的生命周期钩子,但没有任何结果和相同的错误。
任何帮助都非常感谢。非常感谢提前。
答案 0 :(得分:1)
根据您的问题,我理解的是您想要路由到特定的子组件 - onload。请尝试以下代码:
const routes: Routes = [
{
path: '',
redirectTo: 'search',
pathMatch: 'full'
},
{
path: 'search',
component: SearchComponent,
children: [
{ /* page loads on url '/search' with 'AllgarchivComponent' */
path: '',
component: AllgarchivComponent,
outlet: 'search'
},
{ /* page loads on url '/search/allgarchiv' */
path: 'allgarchiv',
component: AllgarchivComponent,
outlet: 'search'
}
]
} ];
如果您只需加载AllgarchivComponent
,则无需在'allgarchiv'
中指定path
。如果您要加载包含网址'search/allgarchiv'
的网页,则只需在'allgarchiv'
中指定path
即可。希望这会有所帮助。
注意:使用上面的代码,您不必在ngAfterContentInit()
中提供任何路由器导航(就像您在search component
中所做的那样)以初始加载AllgarchivComponent
。