Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用Iron路由器在Meteor中通过URL获取路由名称_Meteor_Iron Router - Fatal编程技术网

如何使用Iron路由器在Meteor中通过URL获取路由名称

如何使用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',

我知道要获取当前路由的名称,我需要使用do
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