如何使用Iron路由器在Meteor中通过URL获取路由名称
我知道要获取当前路由的名称,我需要使用do如何使用Iron路由器在Meteor中通过URL获取路由名称,meteor,iron-router,Meteor,Iron Router,我知道要获取当前路由的名称,我需要使用doRouter.current().route.getName()。如果我需要通过给定的URL(不是当前URL)获取路由的名称,该怎么办 假设我有一个URL列表 urls = ['/orders', '/clients', '/clients/tJa84ogQ3cvpxMJ7G'] 我有以下Iron路由器配置: Router.route('/orders', {name: 'ordersList'}); Router.route('/clients',
Router.current().route.getName()
。如果我需要通过给定的URL(不是当前URL)获取路由的名称,该怎么办
假设我有一个URL列表
urls = ['/orders', '/clients', '/clients/tJa84ogQ3cvpxMJ7G']
我有以下Iron路由器配置:
Router.route('/orders', {name: 'ordersList'});
Router.route('/clients', {name: 'clientsList'});
Router.route('/clients/:_id', {
name: 'clientPage',
data: function() {
return Clients.findOne(this.params._id);
}
});
如何从URL列表中获取路由名称列表?那么,从URL列表中获取所有匹配路由的列表
var urls = ['/path1', '/path2/subpath', ...];
var matchingRoutes = _.filter(Router.routes, function(route) {
return _.contain(urls, route.path);
});
如果您特别需要管线名称:
var matchingRoutesNames = _.pluck(matchingRoutes, 'name');
但是,这不适用于带有设置参数的URL,如示例中的'/clients/tJa84ogQ3cvpxMJ7G'
,因为相应的路径不同。这里是/clients/:clientId
你可以使用一些正则表达式黑魔法和小心地拆分URL,但这会变得复杂。我的答案:
var urls = ['/orders', '/clients', '/clients/tJa84ogQ3cvpxMJ7G'];
routeNames = _.map(urls, function(url) {
var route = Router.findFirstRoute(url);
return route ? "", route.getName();
});
来自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;
};
Router.prototype.findFirstRoute=函数(url){
var-isMatch;
var-routeHandler;
对于(var i=0;i