2

ディレクティブとディレクティブを飾る/拡張が合わない基本的なテンプレートを有する成分であります既存のDOMをプログラムで変更するのではなく、新しいテンプレートを簡単に定義できるようになりました。残りのコンポーネントメタデータは継承する必要があります。角度2.</p> <p>例における角度2つの構成要素及び構成要素のIは、(Decoratorパターンのように)継承および装飾のためのいくつかのユースケースを有する

基本的には

export const BASE_SOME_COMPONENT_METADATA = { ... }; 

@Component(BASE_SOME_COMPONENT_METADATA); 
export class BaseSomeComponent { ... } 

... 

import { BaseSomeComponent, BASE_SOME_COMPONENT_METADATA } from '...'; 

@Component(Object.assign({}, BASE_SOME_COMPONENT_METADATA, { template: '...' }); 
export class SomeComponent extends BaseSomeComponent {} 

そして、もっと複雑なケースでは、ThirdPartyComponentは多数の入力を持っていることを

@Component({ ... }); 
export class ThirdPartyComponent { 
    @Input() ...; 
    @Input() ...; 
    @Input() ...; 
    ... 
} 

... 

import { ThirdPartyComponent as BaseThirdPartyComponent } from '...'; 

@Component({ 
    // may modify or replace any of the original properties 
    template: ..., 
    styles: ... 
    ... 
}); 
export class ThirdPartyComponent extends BaseThirdPartyComponent {} 

お知らせです。コンポーネントをラップして外部からの動作を変更する代わりに、コンポーネントを内部的に変更することが有益な場合があります。 ThirdPartyComponentそれらをテンプレートにそれらすべてを列挙し、転送ラッパーコンポーネントはWETと汚れている可能性があり:ラッパーコンポーネントによって導入される

<third-party inputs="inputs" that="that" should="should" be="be" enumerated="enumerated"> 

エクストラレイアウト要素は、ある場合には禁止されてもよいです。

ThirdPartyComponentは、他のサードパーティのコンポーネントで使用されるコアコンポーネント(ボタン)です。それで、それらも影響を受けるはずです。だから、それを伸ばすのではなく、インジェクタ全体に「デコレータを飾る」必要があるかもしれません。

Angular 1.xの場合thirdPartyDirectiveは、コンポーネントDDOに完全にアクセスできるサービスであるため、装飾、拡張、揚げ物などが可能です。Angular 2ではこのアプローチの直接の対応は何ですか? これがいくつかの規則を破って保証を無効にする場合、それは問題ありません。

メタデータをエクスポートしないコンポーネント/ディレクティブはどのように拡張できますか?

既存のコンポーネントのメタデータはどのように変更できますか?

答えて

2

入力は自動的に親クラスから継承されます。 Componentデコレータ自体のプロパティに関しては、Angular2でそれを行うネイティブな方法はありません。 Angular2チームはこれをサポートしません:https://github.com/angular/angular/issues/7968#issuecomment-219865739

あなたが本当にそのような何かをしたい場合、あなたは注釈を更新するカスタムデコレータを実装する必要があります...

この記事では、興味を起こさできます

+0

問題入力は、強制的に実行されるラッパーコンポーネントを参照します。 'テンプレート内にあります。私はNgでこれらのものを使い分けて、コンパイル時にプログラムでattrsを追加しました。私はNg2でそのようなことを効率的に行うためのレシピを見つけようとしています。 – estus

+0

Btw、素晴らしい読書、リンクありがとうございました。実際には、私はあなたからの[この回答](http://stackoverflow.com/a/36837482/3731501)が大部分の質問に答えていることがわかりました。 – estus

関連する問題