程序化路由器导航到具有命名路由器出口的组件

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