【问题标题】:How to route nav tab with parameters in angular?如何使用角度参数路由导航选项卡?
【发布时间】:2020-03-08 07:34:58
【问题描述】:

假设我在参数 id=1 的 Tab1。具体来说,生成的 url 是http://localhost:4200/project/tab1;id=1。现在我单击 Tab2,url 变为http://localhost:4200/project/tab2。有没有办法路由 id 以便我得到http://localhost:4200/project/tab2;id=1

https://stackblitz.com/edit/angular-qzwzju

<nav mat-tab-nav-bar [backgroundColor]="'primary'">
    <div mat-tab-link *ngFor="let link of navTabs" [routerLink]="link.link" routerLinkActive #rla="routerLinkActive"
      [active]="rla.isActive">
      {{link.label}}
    </div>
</nav>
<router-outlet></router-outlet>
navTabs: NavTab[];

activeLinkIndex: number = -1;

constructor(private router: Router, private route: ActivatedRoute) {
  this.navTabs = [
    { label: 'Tab1', link: './tab1', index: 0 },
    { label: 'Tab2', link: './tab2', index: 1 },
    { label: 'Tab3', link: './tab3', index: 2 },
  ];
}

ngOnInit(): void {   
  this.router.events.subscribe((res) => {
    this.activeLinkIndex = this.navTabs.indexOf(this.navTabs.find((tab: NavTab) => tab.link === '.' + this.router.url));
  });
}
export const appRoutes: Routes = [
  { path: 'tab1', component: Tab1Component },
  { path: 'tab2', component: Tab2Component },
  { path: 'tab3', component: Tab3Component },
];

【问题讨论】:

标签: angular


【解决方案1】:

您可以通过在路由器上设置state 来做到这一点。

示例:(this.routerRouter

// In TypeScript
this.router.navigate(['/tab1'], {state: {something: 1}});

// In HTML
<a [routerLink]=”/tab1” [state]=”{ something: 1}”>Go to B</a>

然后,在您的目标组件中,您可以通过以下方式从state 中检索值:

this.router.getCurrentNavigation().extras.state.something

如果您觉得太吵,您可能需要订阅路由器事件并等待NavigationEnd

另一种选择是从history.state.data 获取它。我认为这不是“有角度的方式”,但它有效。

其他选项有:

  • 使用 NavigationResolver
  • 实现像 NgRx 这样的状态机
  • 创建一个服务并使用EventEmitterid 广播给可能想了解它的任何其他组件。

【讨论】:

  • 我应该在哪里使用 this.router.navigate?导航选项卡不使用它来导航到特定的选项卡 url。你能展示一个 stackblitz 演示吗?
  • 然后我会在你的 html 模板中使用 [routerLink][state] 指令。无论您是在 TypeScript 中还是在 HTML 中执行此操作都没有区别。
猜你喜欢
  • 1970-01-01
  • 2019-08-23
  • 1970-01-01
  • 1970-01-01
  • 2020-02-25
  • 2021-10-01
  • 2020-06-16
  • 2015-09-11
  • 2020-12-30
相关资源
最近更新 更多