0

のコードの繰り返しを軽減しようとすると私はHTMLなどで次のパターンを持っている私のコードベースにコードの重複を削減しようとしている:は私のコードベース

<card-component> 
    <card-header>{{entityFormName}}</card-header> 
    <card-body> 
     <form (ngSubmit)="onSubmit()" id="formId" [formGroup]="entityForm"> 
       <!-- <ng-content></ng-content> --> 
       <!-- Here I have a bunch of custom form content/formatting --> 
     </form> 
    </card-body> 
    <card-footer> 
     <!-- button outside of form --> 
     <button type="submit" form="formId" [disabled]="entityForm.invalid || loading">{{submitButtonText}}</button> 
     <!-- loading icon spinner --> 
    </card-footer> 
</card-component> 

は基本的に、私はいくつかのCRUD型を持っていますこのパターンに従ったフォームは、別のコンポーネントにすべて保持して繰り返しを減らしたいと思っています。私はonSubmit()を実装する抽象的なコンポーネントのようなクラスを持っており、entityFormとコントロールloadingを作成します。この抽象クラスから継承するクラスも、独自のフォームのカスタム動作を実装します。

事がある:どのように私はなるように、私は実際にそれを作成することができ、このフォームを実施しているものは何でもコンポーネントにentityFormを送っていますか?それも可能ですか?

また、間違った方法で近づいていますか?おそらくここでコードの繰り返しを減らすためには、より良い/異なるパターンがありますか?

ありがとうございます。

+0

あなたはちょうどあなたがどここれまでプラグインとFormGroupの入力パラメータを持つことができ、このコンポーネントを作りたいように聞こえるがentityFormとentityFormNameとsubmitButtonTextのようないくつかの文字列と呼ばれますか。?この抽象クラス/継承のものをすべて行う必要はありません。しかし、実際には、想像しているよりも再利用性が低く、制限が少ないことがわかります。 – bryan60

+0

私の意図は柔軟性ではありませんが、コードの繰り返しを減らします。読み込みアイコンを変更した場合は、すべてのフォームで変更する必要はありません。フォーム送信コールバックが変更されると判断された場合は、このタイプのすべてのフォームに反映される必要があります。これは一貫性に関するものであり、「任意の」ページで叩かれることを意図しない。 – Badashi

+0

柔軟性とドライとのバランスに優れています。他にも、ローダーのような再利用可能なコンポーネントを作成し、ローダーサービスを作成するなど、欠けているオプションがいくつかあります。今では、フォームの1つが非典型的になった場合、それらをすべて壊さずに編集することはできません。可能性のある結果は、このフレームワークがあまりにも制限的であり、あなたはsubpar uxで終わるということです。これはエンタープライズの角度エンジニアとしての私の展望です。あなたは何でもしてください。 – bryan60

答えて

0

私はそれを理解しました。私のフォームラッパーコンポーネントで

、私は次のようしている:

export class AbstractFormComponent { 
    @Input() 
    formTitle: string; 

    @Input() 
    component: any; 

    get entityForm(): FormGroup { return this.component.entityForm; } 

    get toasterConfig(): ToasterConfig { return this.component.toasterConfig; } 

    get submitButtonText(): string { return this.component.submitButtonText; } 

    _internalSubmit() { 
    this.component.onSubmit(); 
    } 

} 

その後、私は使用することができます私のカスタムフォームの各内:このように

<custom-form formTitle="Form Title" [component]="this"> 
    <!-- form inputs, grid and etc --> 
</custom-form> 

、私のフォームが続きます内側の挙動は内側の構成要素によって制御される。

ここで注意が必要ですが、ラップコンポーネント自体を汎用化することなく汎用タイプ(つまりAbstractEntityComponent<E extends Entity, S extends Service<E>>)として宣言できないため、コンポーネントをanyオブジェクトに設定しました。

関連する問題