【问题标题】:Angular 2 Router link active with two links activatingAngular 2 Router 链接激活,两个链接激活
【发布时间】:2017-10-30 05:19:50
【问题描述】:

我有一个包含以下路线的项目:

{ path: '', component: GamesListingComponent },

    { path: 'inicio', component: HomeComponent },

    { path: 'listar',
        children: [
            { path: '', component: HomeComponent },
            { path: 'fabricantes', component: ManufacturesListingComponent },
            { path: 'plataformas', component: PlatformsListingComponent },
            { path: 'usuarios', component: UsersListingComponent },
            { path: 'jogos', component: GamesListingComponent },
            { path: '**', component: HomeComponent }
        ]
    },

    { path: 'cadastrar',
        children: [
            { path: '', component: HomeComponent },
            { path: 'fabricantes', component: ManufacturesRegisterComponent },
            { path: 'plataformas', component: PlatformsRegisterComponent },
            { path: 'usuarios', component: UsersRegisterComponent },
            { path: 'jogos', component: GamesRegisterComponent },
            { path: '**', component: HomeComponent }
        ]
    },

    { path: '**', component: GamesListingComponent }

我希望仅通过子路由的名称启用 routerLinkActive,例如:

当访问“/listar/jogos”和“/cadastrar/jogos”时,想要访问这两个路由,相同的routerLinkActive处于活动状态。

header.html

<div class="jumbotron">
    <p class="text-center title"><a [routerLink]="['/inicio']">Lightning Games</a></p>
    <p class="text-center">A sua loja de jogos desde o seu primeiro dia</p>
</div>
<nav class="navbar navbar-toggleable-md navbar-inverse bg-inverse">
    <button class="navbar-toggler navbar-toggler-right" type="button" data-toggle="collapse" data-target="#navbarText" aria-controls="navbarText" aria-expanded="false" aria-label="Toggle navigation">
        <span class="navbar-toggler-icon"></span>
    </button>
    <div class="collapse navbar-collapse" id="navbarText">
        <ul class="navbar-nav mr-auto">
            <li class="nav-item" [routerLinkActive]="['active']">
                <a class="nav-link" [routerLink]="['/inicio']">Início <span class="sr-only">(current)</span></a>
            </li>
            <li class="nav-item" [routerLinkActive]="['active']">
                <a class="nav-link" [routerLink]="['/listar', 'plataformas']">Plataformas</a>
            </li>
            <li class="nav-item" [routerLinkActive]="['active']">
                <a class="nav-link" [routerLink]="['/listar', 'fabricantes']">Fabricantes</a>
            </li>
            <li class="nav-item" [routerLinkActive]="['active']">
                <a class="nav-link" [routerLink]="['/listar', 'usuarios']">Usuários</a>
            </li>
            <li class="nav-item" [routerLinkActive]="['active']">
                <a class="nav-link" [routerLink]="['/listar', 'jogos']">Jogos</a>
            </li>
        </ul>
    </div>
</nav>

【问题讨论】:

  • 请同时添加您的 html 代码。听起来你需要添加[routerLinkActiveOptions]="{exact:true}"
  • 我更新了帖子,我应该在家里输入这个命令吗?谢谢

标签: angular routes angular2-routing router


【解决方案1】:
  1. 如果您希望您的路线对 ONE EXACT ROUTE 有效

添加[routerLinkActiveOptions]="{exact:true}" 将使活动类仅适用于精确路由匹配。

如果这是你想要的,那么更新你的&lt;li&gt;标签如下:

<li class="nav-item" [routerLinkActive]="['active']" [routerLinkActiveOptions]="{exact:true}">
   <a class="nav-link" [routerLink]="['/inicio']">Início <span class="sr-only">(current)</span></a>
</li>
  1. 如果您想让 多个类似路线 的路线链接处于活动状态

看看我从官方 Angular 路由示例之一修改的这个 Plunkr 代码。 https://plnkr.co/edit/wWyVfxDHbSA8tYcpsNsF?p=preview

注意两点:

  • 在 app-routing.module.ts 中你会看到有两条相似的路由:

{ path: 'heroes/:id', component: HeroDetailComponent }, { path: 'heroes', component: HeroesComponent }

  • 在 app.component.ts(在嵌入的模板代码中)你会看到它们是一个路由:

&lt;routerLink="/heroes" routerLinkActive="active"&gt;Heroes&lt;/a&gt;

此路由匹配 app-routing.module.ts 中设置的两个路径 - 这意味着它将为任何以 /heroes

开头的路由应用活动类

更新:

在您的示例中,您可以通过将路由更改为以下内容来做到这一点:

app.routes.ts

const appRoutes: Routes = [

  { path: '', component: GamesListingComponent },

  { path: 'inicio', component: HomeComponent },

  { path: '', component: HomeComponent },

  { path: 'jogos', component: GamesListingComponent },
  { path: 'fabricantes', component: ManufacturesListingComponent },
  { path: 'plataformas', component: PlatformsListingComponent },
  { path: 'usuarios', component: UsersListingComponent },

  { path: 'jogos/cadastrar', component: GamesRegisterComponent },
  { path: 'fabricantes/cadastrar', component: ManufacturesRegisterComponent },
  { path: 'plataformas/cadastrar', component: PlatformsRegisterComponent },
  { path: 'usuarios/cadastrar', component: UsersRegisterComponent },

  { path: '**', component: GamesListingComponent }

];

export const routing = RouterModule.forRoot(appRoutes);`

header.component.html

        <li class="nav-item" [routerLinkActive]="['active']">
            <a class="nav-link" [routerLink]="['/inicio']">Início <span class="sr-only">(current)</span></a>
        </li>
        <li class="nav-item" [routerLinkActive]="['active']">
            <a class="nav-link" [routerLink]="['/plataformas']">Plataformas</a>
        </li>
        <li class="nav-item" [routerLinkActive]="['active']">
            <a class="nav-link" [routerLink]="['/fabricantes']">Fabricantes</a>
        </li>
        <li class="nav-item" [routerLinkActive]="['active']">
            <a class="nav-link" [routerLink]="['/usuarios']">Usuários</a>
        </li>
        <li class="nav-item" [routerLinkActive]="['active']" >
            <a class="nav-link" [routerLink]="['/jogos']">Jogos</a>
        </li>

xxx-listing.component.html

<a [routerLink]="['/jogos/cadastrar']" class="btn btn-primary">
  Novo Jogo
</a>

【讨论】:

  • 它仍然不起作用,当我输入“/listar/jogos”时它会带来资产,但是当我输入“/cadastrar/jogos”时它被禁用。
  • 嗨@HenriqueBuzin,我认为这就是你想要的。我会更新答案。
  • 不幸的是它不起作用,我修改了所有内容以同意并且它不是,当我将“jogos/listar”放入活动作品时,但是当我放入“jogos/cadastrar”时,不会有我还能做什么?我听说了解 lick active router,但我不确定它会是什么样子。谢谢!
  • 嗨@HenriqueBuzin - 您需要创建一个 plunkr 或可下载的代码示例,以便我进一步提供帮助。如果你在这里发布链接,我会看看。
  • 好的,我会提供的,这是有疑问的版本,如果您需要修改了上一个答案的版本,请告诉我,我也有它可用。谢谢。
【解决方案2】:

如果你想为两个链接激活你的路由,然后像这样更改你的 html 文件,

<nav class='navbar navbar-expand navbar-light bg-light'>
   <div class='width-100'>
     <div class='float-left'> 
    <ul class='nav nav-pills'>   
      <li><a class='nav-link' [routerLinkActive]="['active']" [routerLinkActiveOptions]="{exact:true}"[routerLink]="['/abc']">Abc</a></li>
      <li class="nav-link" [routerLinkActive]="['active']" [routerLinkActiveOptions]="{exact:true}" [routerLink]="['/def']" >Def
               <a routerLink="/ghi"></a>
      </li>
     </ul>
    </div> 
   </div>
</nav>

然后像这样在你的 app-module.ts 文件中定义你的路由,

imports: [
    BrowserModule,  
    FormsModule,
    RouterModule.forRoot([
      //, canDeactivate : ['canDeactivateCreateEmployee']},
      { path: 'abc', component: AbcComponent },
      { path: 'def', component: DefComponent },
      { path: 'ghi',  component: GhiComponent},
      { path: '', redirectTo: 'AbcComponent', pathMatch: 'full' },
      { path: '**', redirectTo: 'AbcComponent', pathMatch: 'full' }
    ])
  ],

这将使两个 URL (def,ghi) 的单个 RouterLinkActive

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-07-22
    • 1970-01-01
    • 2015-12-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-20
    • 1970-01-01
    • 2012-08-02
    相关资源
    最近更新 更多