使用 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 中,onAfterAction
被 triggersExit
替换,因此您可以:
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>
所以我找到了这个 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 中,onAfterAction
被 triggersExit
替换,因此您可以:
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>