AngularJS - 获取已定义路由的列表 - $routeProvider

2024-05-17

我正在尝试实施named routes,所以我不必写整个路径(经常改变)。

我想我可以编写一个服务来返回定义的路由列表和一个将对象转换为路由的过滤器

使用示例如下所示:

<a ng-href="{id:1}|route:'detail'">Click here!</a>

假设我已将 name:'detail' 添加到我的路线定义中,这将生成以下结果:

<a href="#/detail/1/">Click here!</a>

我认为这很简单,但是:

如何获取已定义路线的列表?

我想我可以利用routeProvider,但据我所知,它没有我可以访问的公共方法或属性。


事实证明这非常简单:

http://plunker.co/edit/GNZxcvK4hfQ9LrlSvasK?p=preview http://plunker.co/edit/GNZxcvK4hfQ9LrlSvasK?p=preview

Components.filter('url', function ($route) {
  function resolveRoute(options, route) {
    var parts = route.split('/');
    for (var i = 0; i < parts.length; i++) {
      var part = parts[i];
      if (part[0] === ':') {
        parts[i] = options[part.replace(':', '')];
        if (parts[i] == undefined) throw Error('Attribute \'' + part + '\' was not given for route \'' + route + '\'')
      }
    }
    return parts.join('/');
  }

  return function (options, routeName) {
    var routes = [];


    angular.forEach($route.routes,function (config,route) {
      if(config.name===routeName){
        routes.push(route);
      }
    });

    if (routes.length == 1) {
      return resolveRoute(options, routes[0]);
    }
    else if (routes.length == 0) {
      throw Error('Route ' + routeName + ' not found');
    }
    throw Error('Multiple routes matching ' + routeName + ' were found');
  }
});
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

AngularJS - 获取已定义路由的列表 - $routeProvider 的相关文章

随机推荐