ディレクティブとディレクティブを飾る/拡張が合わない基本的なテンプレートを有する成分であります既存の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ではこのアプローチの直接の対応は何ですか? これがいくつかの規則を破って保証を無効にする場合、それは問題ありません。
メタデータをエクスポートしないコンポーネント/ディレクティブはどのように拡張できますか?
既存のコンポーネントのメタデータはどのように変更できますか?
問題入力は、強制的に実行されるラッパーコンポーネントを参照します。 'テンプレート内にあります。私はNgでこれらのものを使い分けて、コンパイル時にプログラムでattrsを追加しました。私はNg2でそのようなことを効率的に行うためのレシピを見つけようとしています。 –
estus
Btw、素晴らしい読書、リンクありがとうございました。実際には、私はあなたからの[この回答](http://stackoverflow.com/a/36837482/3731501)が大部分の質問に答えていることがわかりました。 – estus