Angular 2路由与自定义安全指令

时间:2016-08-20 01:40:14

标签: angular angular2-routing

我在Thierry Templier的另一篇stackoverflow帖子上找到了一个非常巧妙的解决方案,但是Angular 2 RC5新路由器已经过时了。

基本上这是安全指令:

@Directive({
  selector: '[secured]'
})
export class SecuredDirective implements OnInit {
  @HostBinding('hidden') hideRouterLink: boolean = false;

  @Input() routerLink: string;

  constructor(private router: Router ) {
    console.log(router);
  }

  ngOnInit(): void {
    console.log(this.routerLink);

    // How to get routeData here??
    // Auth logic
    this.hideRouterLink = true;

  }
}

以前在angular的旧路由器上我们可以这样做:

var instruction = this.router.generate(this.routeParams);
var data = instruction.component.routeData.data;

现在使用RC5,我无法弄清楚如何获取路由器指令。 还有另一种方法吗?

修改:更多信息

我想要实现的是获取routing.ts示例中定义的路由数据:

{ path: 'control-panel', component: ControlPanelComponent, data: { 'resources': 'controlpanel', 'privileges': 'admin'} }

非常感谢任何帮助,谢谢!

1 个答案:

答案 0 :(得分:0)

你可以在下面试试,

@Directive({
 selector: '[secured]'
})
export class SecuredDirective implements OnInit, AfterViewInit  {
  _hideRouterLink: string = '';
  @HostBinding('style.display') get hideRouterLink() {
    return this._hideRouterLink; 
  } 
  set hideRouterLink(val: boolean){
    this._hideRouterLink =  val;
  }

  @Input('routerLink') routeParams:  any[];

  constructor(private router: Router ) {
   console.log(router);
  }

  ngAfterViewInit(){  
  }

  ngOnInit(): void {
    console.log(this.routeParams);

    // Auth Logic
    this.hideRouterLink = 'none';
  }
}

以下是Plunker!

希望这会有所帮助!!