使用 Flow-Router 时在 bootstrap 导航中突出显示活动路线

Highlight active route in bootstrap nav when using Flow-Router

所以我找到了这个 Navigation Bar feature with Bootstrap-3,但截至目前,我使用的是 Flow-Router 而不是 Iron-Router。因此,我正在寻求将此辅助函数转换为 Flow-Router 术语:

Template.navItems.helpers({
    activeIfTemplateIs: function (template) {
      var currentRoute = Router.current();
      return currentRoute &&
        template === currentRoute.lookupTemplate() ? 'active' : '';
    }
});

我已经自己尝试解决这个问题(尽管我没有费心去测试它,因为我的 site/app 的许多部分仍然无法正常工作),但我需要以 "yes" 或 "no" 以及关于我做错了什么的更多信息。

Template.navItems.helpers({
    activeIfTemplateIs: function (template) {
      var currentRoute = FlowRouter.current();
      return currentRoute &&
        template === currentRoute.name ? 'active' : '';
    }
});

我从 Flow-Router API 引导自己。这个解决方案是正确的还是出于某种原因或其他原因必须与 Iron-Router 一起使用?

在进一步考虑您的实际问题后,我意识到我在我的应用程序中以完全不同的方式执行此操作,也许您会发现 that pattern 有用。我的应用程序还使用 bootstrap 并有一个导航,我想在其中突出显示活动路线(并取消突出显示所有其他路线)。

在 iron-router 中,我这样做:

onAfterAction(){
  const selector = '.nav a[href="/' + Router.current().route.getName() + '"]'; // the nav item for the active route (if any)
  $('.nav-active').removeClass('nav-active'); // unhighlight any previously highlighted nav
  $(selector).addClass('nav-active'); // highlight the current nav (if it exists, many routes don't have a nav)
}

在 Flow-Router 中,onAfterActiontriggersExit 替换,因此您可以:

triggersExit(){
  const selector = '.nav a[href="' + FlowRouter.current().path + '"]';
  $('.nav-active').removeClass('nav-active');
  $(selector).addClass('nav-active');
}

我发现这比使用空格键模板更方便。

仅供参考,您有几个选项可以获取路线名称:

FlowRouter.getRouteName() // reactive

FlowRouter.current().route.name // NOT reactive

为了给你一个更完整的画面,这就是我的项目所做的。

模板HTML代码

<template name="topNavbar">
<nav class="navbar navbar-default">
  <ul class="nav navbar-nav">
    <li><a class="navbar-brand" href="/">Sample</a></li>

    <li class="{{ activeIfTemplateIs 'home' }}">
      <a href="/home">Home</a>
    </li>

    <li class="{{ activeIfTemplateIs 'users' }}">
      <a href="/users">Users</a>
    </li>

  </ul>
</nav>
</template>

JavaScript代码

Template.topNavbar.helpers({
  activeIfTemplateIs: function (template) {
    var currentRoute = FlowRouter.getRouteName();
    return currentRoute && template === currentRoute ? 'active' : '';
  }
});

现在您可以使用 Active-Route package.

例如:

<a class="nav-tab {{isActivePath class='nav-current' path='/new'}}" href="/new">
  New
</a>