7

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

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

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

现在我想问如果is或Router.RouterouterLink/foo/bar/baz/123

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

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

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

4

2 回答 2

0

您可以触发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"

于 2016-12-24T22:28:28.693 回答
-1

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

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,'*******************');
       }

 }
于 2016-12-26T13:09:20.753 回答