【问题标题】:How to get route name by URL in Meteor using Iron Router如何使用 Iron Router 在 Meteor 中通过 URL 获取路由名称
【发布时间】:2015-12-04 15:01:38
【问题描述】:

我知道要获得当前路线的名称,我需要使用 do Router.current().route.getName()。如果我需要通过给定的 URL(不是当前的 URL)获取路由名称怎么办。

假设我有 URL 列表

urls = ['/orders', '/clients', '/clients/tJa84ogQ3cvpxMJ7G']

我有以下 Iron Router 配置:

Router.route('/orders', {name: 'ordersList'});

Router.route('/clients', {name: 'clientsList'});

Router.route('/clients/:_id', {
  name: 'clientPage',
  data: function() {
    return Clients.findOne(this.params._id);
  }
});

如何从 urls 列表中获取路线名称列表?

【问题讨论】:

    标签: meteor iron-router


    【解决方案1】:

    那么,从一个 URL 列表中,获取所有匹配路由的列表?

    var urls = ['/path1', '/path2/subpath', ...];
    var matchingRoutes = _.filter(Router.routes, function(route) {
      return _.contain(urls, route.path);
    });
    

    如果您想要具体的路线名称:

    var matchingRoutesNames = _.pluck(matchingRoutes, 'name');
    

    More about underscore

    但是,这不适用于在您的示例中设置参数的 URL,例如 '/clients/tJa84ogQ3cvpxMJ7G',因为相应的路径不同。在这里,应该是/clients/:clientId
    您也许可以使用一些正则表达式黑魔法和仔细拆分 URL 使其工作,但它会变得复杂。

    【讨论】:

      【解决方案2】:

      我的回答:

      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;
      };
      

      【讨论】:

        猜你喜欢
        • 2014-04-08
        • 1970-01-01
        • 1970-01-01
        • 2018-04-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多