2016-08-25 6 views
1

routerLinkビルトインディレクティブを拡張して、customRouterLinkという独自のディレクティブを作成したいと考えています。アトリビュートディレクティブの拡張

は、私は単にRouterLinkWithHrefを拡張するクラスを作成している:

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

    constructor(router: Router, route: ActivatedRoute, locationStrategy: LocationStrategy) { 
    super(router, route, locationStrategy); 
    } 

    @Input() 
    set customRouterLink(data: any[]|string) { 
     console.log("custom directive input", data); 
    } 

} 

を私はこのディレクティブのインスタンスを作成しようとしています:

次のエラーの原因になっている
<a [customRouterLink]="'http://www.google.com'">custom link</a> 

Can't bind to 'customRouterLink' since it isn't a known property of 'a'. 

ただし、私がextends RouterLinkWithHrefを削除した場合mディレクティブの定義は動作します。

例plunkers:

  • CustomLinkDirective extends RouterLinkWithHrefからRouterLinkWithHrefを延長しないShows error above
  • CustomLinkDirectiveからDirective created without errorあなたのモジュールのdeclarationsCustomLinkDirectiveを追加したり、より良いCustomLinkDirectiveためのモジュールを作成して追加する必要が
+0

これを最後に解決しましたか?同様のことをしているのを見ていました – Ryan

答えて

0

このモジュールをルータのリンクを使用するモジュールのimports: [...]に転送します。

+0

モジュールの '宣言'に 'CustomLinkDirective'を含む新しいプランカを作成しましたが、それでも動作しません。思考? https://plnkr.co/edit/8JMdOQ4S1COHOkgA39kT – jwa

+0

また、 'RouterLinkWithHref'を拡張しないと、ディレクティブは正常に動作することに注意してください。 '宣言の欠如がそれになぜ影響を及ぼすのかは不明だ。 – jwa

+0

実際、私は知らない。しかし、宣言に追加されていないときに、なぜそれがうまくいくのだろうと思っているのですか、それをコンポーネントの '指令'に追加しましたか? –

1

RouterLinkWithHrefクラスを拡張しようとしたときに同じエラーが発生しました。このエラーは、ディレクティブに@Inputデコレータを含めないという事実から来ています。 URL文字列<a [customRouterLink]="'http://www.google.com'">custom link</a>を渡そうとしていますが、この値をクラス内にバインドするプロパティが見つからず、エラーがスローされます。これを解決するには、単に@input('customRouterLink') link: stringを追加します。