【问题标题】:Angular 2 root's route is always activeAngular 2 root 的路由始终处于活动状态
【发布时间】:2016-10-09 11:41:19
【问题描述】:

最近我阅读了this useful article about Angular 2 Router 并查看了the demo。一切似乎都很完美。但是当我尝试根据router-link-active类确定活动路由时,我发现根路由始终处于活动状态。

这是 app.component.ts 的一段代码,其中配置了“主”路由:

@Component({
  selector: 'demo-app',
  template: `
    <a [routerLink]="['/']">Home</a>
      <a [routerLink]="['/about']">About</a>
    <div class="outer-outlet">
      <router-outlet></router-outlet>
    </div>
  `,
  // add our router directives we will be using
  directives: [ROUTER_DIRECTIVES]
})
@Routes([
    // these are our two routes
    { path: '/', name: 'Home', component: HomeComponent }, // , useAsDefault: true}, // coming soon
    { path: '/about', name: 'About', component: AboutComponent }
])
export class AppComponent { }

如果我将路径从'/' 更改为'/home' 并将&lt;a [routerLink]="['/']"&gt;Home&lt;/a&gt; 更改为&lt;a [routerLink]="['/home']"&gt;Home&lt;/a&gt;,默认组件(必须是 HomeComponent)就会消失。 HomeComponent 只有在点击链接时才会被激活,并且每次我们切换到另一个路由时,router-link-active 都会被正确添加和删除。

这是一个错误还是路由配置有问题?

【问题讨论】:

  • 这个链接对你来说可能很有趣github.com/angular/angular/issues/8397
  • 嗨@yurzui,感谢您的链接。这很有帮助。原来这就是 Angular 2 路由的工作方式。所以我必须做我自己的解决方法.. :(
  • yurzui 的链接似乎是关于新路由器的。对于 beta 和 RC.1 @angular/router-deprecated github.com/angular/angular/issues/5334 似乎是相关问题。
  • 我正在使用新路由器进行演示。所以我认为链接是相关的。
  • @asubanovsky 如果你有,请分享你的解决方法,我正在经历同样的面部手掌,“Home”始终处于活动状态

标签: javascript angular


【解决方案1】:

将以下属性添加到您的主锚对我有用。 [routerLinkActiveOptions]="{ exact: true }"

了解更多https://github.com/angular/angular/issues/8397#issuecomment-237314970

【讨论】:

【解决方案2】:

这就是它的工作方式:

<nav>
    <a routerLink="/" routerLinkActive="active" [routerLinkActiveOptions]="{exact: true}">Home</a>
    <a routerLink="/about" routerLinkActive="active">About</a>
</nav>

【讨论】:

    【解决方案3】:

    据我所知,这不是一个错误,您需要有一个用于/ 或未知路径的后备组件。 (很可能是 HomeComponent)

    @Routes([
      { path: '/home', component: HomeComponent },
      { path: '/about', component: AboutComponent },
      { path: '*', name: component: HomeComponent }
    ]);
    

    虽然这是使用新的 Router 模块(不是已弃用的模块),但适用于 rc.0rc.1

    【讨论】:

    • 感谢您的回复。但这无济于事。我认为,当我们定义根路由“/”时,它会使另一条路由(例如“/about”)充当其子路由。这样“route-link-active”类就出现了。
    猜你喜欢
    • 1970-01-01
    • 2017-01-04
    • 1970-01-01
    • 1970-01-01
    • 2016-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多