程序化路由器导航到具有命名路由器出口的组件
Programmatic Router Navigation to Component with named router-outlet
我有一个关于组件内编程路由器导航的模糊问题。我真的搜索了很多有用的解决方案,但不幸的是我没有得到它。坦白说...我不是 angular 专家,因为我还在学习。
简而言之。我有一个 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 { }
总而言之,我有两个路由器插座,一个是主插座,另一个是 "search"(见上文)。
在加载 SearchComponent 期间(有效!)我想自动路由到路径 "allgarchiv"(见上文;router-outlet = "search")。
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']}}] );
}
}
但这行不通。我收到以下错误:
ERROR Error: Uncaught (in promise): Error: Cannot match any routes.
URL Segment: 'allgarchiv' Error: Cannot match any routes. URL Segment:
'allgarchiv'
如果您在模板中查看,我也尝试过首先单击路由器-Link(Test_LoadRouter;当前评论)。这就像一个魅力!!
我的问题是如何从 SearchComponent 以编程方式导航到路由器?
我也尝试了不同的生命周期挂钩,但没有任何结果和同样的错误。
非常感谢任何帮助。非常感谢。
根据你的问题,我的理解是你想路由到特定的子组件 - 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
,则无需在 path
中指定 'allgarchiv'
。如果你想用 url 'search/allgarchiv'
加载页面,那么只需要在 path
中指定 'allgarchiv'
。希望这有帮助。
注意:使用上面的代码,您不必在 search component
中提供任何路由器导航(就像您在 ngAfterContentInit()
中所做的那样)来初始加载 AllgarchivComponent
。
我有一个关于组件内编程路由器导航的模糊问题。我真的搜索了很多有用的解决方案,但不幸的是我没有得到它。坦白说...我不是 angular 专家,因为我还在学习。
简而言之。我有一个 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 { }
总而言之,我有两个路由器插座,一个是主插座,另一个是 "search"(见上文)。
在加载 SearchComponent 期间(有效!)我想自动路由到路径 "allgarchiv"(见上文;router-outlet = "search")。
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']}}] );
}
}
但这行不通。我收到以下错误:
ERROR Error: Uncaught (in promise): Error: Cannot match any routes. URL Segment: 'allgarchiv' Error: Cannot match any routes. URL Segment: 'allgarchiv'
如果您在模板中查看,我也尝试过首先单击路由器-Link(Test_LoadRouter;当前评论)。这就像一个魅力!!
我的问题是如何从 SearchComponent 以编程方式导航到路由器?
我也尝试了不同的生命周期挂钩,但没有任何结果和同样的错误。
非常感谢任何帮助。非常感谢。
根据你的问题,我的理解是你想路由到特定的子组件 - 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
,则无需在 path
中指定 'allgarchiv'
。如果你想用 url 'search/allgarchiv'
加载页面,那么只需要在 path
中指定 'allgarchiv'
。希望这有帮助。
注意:使用上面的代码,您不必在 search component
中提供任何路由器导航(就像您在 ngAfterContentInit()
中所做的那样)来初始加载 AllgarchivComponent
。