我知道要获取当前路线的名称,我需要使用Router.current().route.getName()
。如果我需要通过给定的URL(不是当前URL)获取路由的名称,该怎么办。
假设我有URL列表
urls = ['/orders', '/clients', '/clients/tJa84ogQ3cvpxMJ7G']
我有以下铁路由器配置:
Router.route('/orders', {name: 'ordersList'});
Router.route('/clients', {name: 'clientsList'});
Router.route('/clients/:_id', {
name: 'clientPage',
data: function() {
return Clients.findOne(this.params._id);
}
});
如何从网址列表中获取路线名称列表?
答案 0 :(得分:1)
那么,从URL列表中,获取所有匹配路由的列表?
var urls = ['/path1', '/path2/subpath', ...];
var matchingRoutes = _.filter(Router.routes, function(route) {
return _.contain(urls, route.path);
});
如果您特别想要路线名称:
var matchingRoutesNames = _.pluck(matchingRoutes, 'name');
但是,对于您的示例中具有'/clients/tJa84ogQ3cvpxMJ7G'
等设置参数的网址,这不起作用,因为相应的路径不相同。在这里,它将是/clients/:clientId
你也许可以使用一些正则表达式的黑魔法并小心地分割URL,但它会变得复杂。
答案 1 :(得分:1)
我的回答:
ironrouter/router-client.js:151
来自Router.prototype.findFirstRoute = function (url) {
var isMatch;
var routeHandler;
for (var i = 0; i < this.routes.length; i++) {
route = this.routes[i];
// only matches if the url matches AND the
// current environment matches.
isMatch = route.handler.test(url, {
where: Meteor.isServer ? 'server' : 'client'
});
if (isMatch)
return route;
}
return null;
};
的代码
{{1}}