获取路由中的信息
Flow Router除了在路由中向action
方法传递参数之外,还通过(响应式的以及其他的)方法在全局单例FlowRouter
中创建了大量有效的信息。
当用户浏览你的应用时,这些方法中的值将随之改变(在某些情况下是响应式地变化)。
如同应用中的任何其他单例(参见数据加载中关于存储的内容),这是限制你直接访问FlowRouter
最好的办法。应用中的这部分方法将保持模块化及独立性。至于FlowRouter
,最好是单独地从顶部组件层访问,从“页面”组件中,或者从包裹它的框架结构中进行访问。可以从UI相关的文章中阅读更多关于访问数据的内容。
当前的路由
在代码中访问当前路由的信息是非常有用的,这里有一些你可以调用的响应式方法:
FlowRouter.getRouteName()
获取路由的名称FlowRouter.getParam(paramName)
返回某个URL的参数值FlowRouter.getQueryParam(paramName)
返回某个URL的查询参数
在我们的示例应用Todos的列表页中,我们可以通过FlowRouter.getParam('_id')
访问到当前列表的ID(我们将在后续了解更多)。
高亮显示激活的路由
一种合理的情况是当通过导航组件渲染出链接时,通过全局单例FlowRouter
,在组件层更深入地访问当前路由的信息。这通常需要通过一些方式高亮显示“激活的”路由(是指用户当前访问的路由或者网站的版块)。
通过zimme:active-route
包我们可以非常方便的实现这些:
meteor add zimme:active-route
在示例应用Todos的App_body
模板中,我们链接到每个用户知晓的列表中:
{{#each list in lists}}
<a class="list-todo {{activeListClass list}}">
...
{{list.name}}
</a>
{{/each}}
通过activeListClass
帮助器我们可以确定用户当前访问的列表:
Template.App_body.helpers({
activeListClass(list) {
const active = ActiveRoute.name('Lists.show')
&& FlowRouter.getParam('_id') === list._id;
return active && 'active';
}
});