【问题标题】:Angular2 Router: Get Route for URL without navigatingAngular2路由器:无需导航即可获取URL的路由
【发布时间】:2017-05-07 09:36:37
【问题描述】:

我想根据来自路由器的一些Data 显示/隐藏routerLinks。指令完成了,但我错过了最重要的部分......

例如,我有以下路由器配置(省略组件):

[
  { path: '', children: [
    { path: 'foo', children: [
      { path: 'bar', data: { requiredPermissions: ['a', 'b'] } }
    ]}
  ]},
  { path: 'baz', data: { requiredPermissions: ['c'] }, children: [
    { path: ':id' }
  ]}
]

现在我想向Router 询问Route,如果routerLink/foo/bar/baz/123,将使用它。

我查看了Router 源代码(https://github.com/angular/angular/blob/master/modules/%40angular/router/src/router.ts),但找不到一些简单的方法来做到这一点。尤其是它如何处理这些:id 变量。

当然,我可以迭代 Router.config,越深入越好。但是我必须解析这些变量、正则表达式等。必须有一种更简单的方法,因为角度路由器也必须在内部完成所有这些工作。

你有什么想法/解决方案吗?

【问题讨论】:

  • 你想要当前路线的数据吗?

标签: angular angular2-routing angular2-router3 angular2-router


【解决方案1】:

您可以触发 router.navigateByUrl,等待 RouteRecognized 事件并取消导航(例如使用自定义 Guard)。 RouteRecognized 将拥有所有必要的信息。显然这是不好的解决方案。

还有另一种方法,您可以创建额外的结构(有点地图),它应该包含路径 + 数据。例如结构有路径struct.baz-route={url:'baz/:id', perm: ['c']},然后是[routerLink]="struct.baz-route.url.replace(':id', x)",然后是*ngIf="struct.baz-url.perm.indexOf('c')>-1"

【讨论】:

    【解决方案2】:

    嘿,如果你想要来自当前路线的数据,那么你可以这样做

    import {ActivatedRoute} from '@angular/router';
    
    export class Component {
    
       constructor(private route: ActivatedRoute){
              let pathroots = this.route.pathFromRoot;
              let pathurl = '';
              pathroots.forEach(path => {
    
                  path.url.subscribe(url => {
                       url.forEach(e => {
                          pathurl += e + '/';
                       });
                  });
    
    
             });
             console.log(pathurl,'*******************');
           }
    
     }
    

    【讨论】:

      猜你喜欢
      • 2018-06-08
      • 2016-11-17
      • 1970-01-01
      • 2016-11-14
      • 1970-01-01
      • 2016-10-29
      • 2016-09-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多