【问题标题】:Angular Mat-Tab-Group navigation with routerLink带有 routerLink 的 Angular Mat-Tab-Group 导航
【发布时间】:2021-03-30 19:48:52
【问题描述】:

我的网址是 localhost:port/home 当我点击一个垫子标签时,我想将 url 调整为 home/secondTab、home/thirdTab 或 home/firstTab。我本来希望使用这种设置,但它不起作用。

我想构建一个路由,目标是当我告诉路由器 router.navigate(['home/secondTab'] 时,他会加载 homecomponent 和 secondTabComponent 并且用户将 secondTab 作为焦点。

所有子路由(home/secondTab)似乎都不起作用,url 永远不会在点击时更新,当我自己输入 home/secondTab url 时,HomeComponent 会被加载。 所以简而言之,没有任何效果,也找不到与每个人都使用 nav mat + mat-tab-link 相同的设置示例

我对前端开发还很陌生,官方文档对我来说不是很清楚。 每个组件都需要一个路由模块吗?或者我可以在此设置中的应用程序路由中全部完成它们吗? 是否有可能通过我拥有的设置获得我想要的东西,或者我错过了什么? 感谢您的意见。

对于那些指向 nav mat + mat-tab-link 的人,由于其他流程以这种方式工作,我无法像那样重构它。

home.html

<mat-tab-group (selectedTabChange)="selectedTabChanged($event)" >
    <mat-tab label="FirstTab" >
        <app-FirstTab></app-FirstTab>  
    </mat-tab> 
    <mat-tab label="SecondTab" >
        <app-SecondTab></app-SecondTab>  
    </mat-tab> 
    <mat-tab label="ThirdTab" >
        <app-ThirdTab></app-ThirdTab>  
    </mat-tab> 
</mat-tab-group>

home.ts

selectedTabChanged(event: any){
    if(event.index == 0){ 
      this.Service.refreshTab();        
    }

    if(event.index == 1){ 
        this.Service.makeApiCall();  
    }

    if(event.index == 2){ 
 
    }
}

导航.html

<div>
    <strong [routerLink]="['home/secondTab']" >
    </strong>
</div>

app-routing.ts

const routes: Routes = [
  Shell.childRoutes([
    { path: '', redirectTo: '/login', pathMatch: 'full' },  //works
    { path: 'home', component: HomeComponent },             //works

    { path: 'home/secondTab', component: SecondTabComponent }   //loads HomeComponent
    //OR        
    { path: 'home/secondTab', component: HomeComponent, loadChildren: () =>
        import ('./home/Second/Second.cmpnt').then(m => m.SecondTabComponent) }
  ])
];

@NgModule({
  imports: [RouterModule.forChild(routes)],
  exports: [RouterModule],
  providers: []
})
export class HomeRoutingModule { }

【问题讨论】:

    标签: angular url-routing routerlink


    【解决方案1】:

    你可以做这样的事情。通过路由器参数传递FirstTab、secondTab 或thirdTab

    Check this

    然后你可以订阅 paramMap 并且可以写一些这样的东西。

    <mat-tab-group [(selectedIndex)]="demo1TabIndex" (selectedTabChange)="selectedTabChanged($event)" >
        <mat-tab label="FirstTab" >
            <app-FirstTab></app-FirstTab>  
        </mat-tab> 
        <mat-tab label="SecondTab" >
            <app-SecondTab></app-SecondTab>  
        </mat-tab> 
        <mat-tab label="ThirdTab" >
            <app-ThirdTab></app-ThirdTab>  
        </mat-tab> 
    </mat-tab-group>
    

    ...

        public demo1TabIndex = 1;
    
        ngOnInit() {
          this.route.paramMap.subscribe(params => {
            let tabName = params.get('tabn;ame')
    
        let _index = 1;
     
        if(tabName == 'FirstTab'){
            this.index = 1;
        }
    
        if(tabName == 'secondTab'){
            this.index = 2;
        }
    
    
        if(tabName == 'thirdTab '){
            this.index = 3;
        }
    
           this.demo1TabIndex = _index;
        }
    

    我只是给你想法和定制你想要的代码。

    【讨论】:

    • 感谢您的回答。这是一个有趣的视频。我仍然对您的示例有一些疑问:我在哪里传递参数,在 mat-tab 标签或 上。另外,每个链接都需要一个 吗?谢谢你
    猜你喜欢
    • 2022-10-16
    • 2020-09-12
    • 2018-12-16
    • 2018-06-06
    • 2022-12-22
    • 2019-03-28
    • 2020-11-24
    • 2017-06-15
    • 2019-08-02
    相关资源
    最近更新 更多