以角度2扩展routerLink?

Rea*_*ues 6 typescript angular2-directives angular2-routing angular2-router3 angular

如何[routerLink]从 Angular Router v3扩展指令,以便我可以自己包装一些自定义功能?我查看了RouterLinkWithHref指令,看来这就是我想要扩展的内容,所以我制作了这个:

扩展路由器链接指令

import {Directive, Input} from '@angular/core';
import {RouterLinkWithHref} from "@angular/router";
import {Model} from "../Classes/Model.class";

@Directive({
    selector: 'a[extendedRouterLink]'
})
export class ExtendedRouterLinkDirective extends RouterLinkWithHref {
    @Input('extendedRouterLink') model : Model;

    // Future custom logic
}
Run Code Online (Sandbox Code Playgroud)

我尝试像这样使用它:

<a [extendedRouterLink]="model">
Run Code Online (Sandbox Code Playgroud)

我将它包含在directives我的组件数组中:

...
directives: [ROUTER_DIRECTIVES, ExtendedRouterLinkDirective],
...
Run Code Online (Sandbox Code Playgroud)

但是,我收到以下运行时错误:

“模板解析错误:无法绑定到‘extendedRouterLink’,因为它不是已知的本机属性”

如果我extends RouterLinkWithHref从我的指令中删除,它可以正常工作而不会出错。我究竟做错了什么?

小智 3

我也需要同样的。使用您的帖子,我能够使其发挥作用。这是缺少的内容:

@Input() mgiRouterLink: string ngOnInit() 

ngOnInit() {
    this.href = this.routerLink = this.mgiRouterLink  
}
Run Code Online (Sandbox Code Playgroud)

父routeLink指令期望this.href和this.routerLink保存来自DOM属性的数据。现在看起来像这样:

import {Directive, Input} from '@angular/core';
import {RouterLinkWithHref} from "@angular/router";
import {Model} from "../Classes/Model.class";

@Directive({
    selector: 'a[extendedRouterLink]' 
}) 
export class ExtendedRouterLinkDirective extends RouterLinkWithHref {

    @Input() mgiRouterLink: string ngOnInit() 

    ngOnInit() {
        this.href = this.routerLink = this.mgiRouterLink  
    } 
}
Run Code Online (Sandbox Code Playgroud)

  • routerLinkActive 不再工作,您有线索吗? (2认同)