2016-09-12 5 views
0

私はAngularJS 1.5.xアプリケーションを設計しています。このアプリケーションは、フォームがたくさんあり、フォームごとにたくさんのフィールドがあります。私は例えば、私は属性をたくさん繰り返してることを発見しています。:angularjsでフォーム要素の属性の繰り返しを減らす最善の方法は何ですか?

<div class="form-group"> 
    <label class="control-label" for="thing.Field1">Field 1</label> 
    <input class="form-control ctrl-md" 
      type="text" 
      id="thing.Field1" 
      name="Field1" 
      ng-model="thing.Field1" 
      ng-maxlength="30" 
      required 
      uib-tooltip="Field 1 is required" 
      tooltip-placement="right" 
      tooltip-trigger="none" 
      tooltip-is-open="thingForm1.Field1.$invalid && showValidationErr('Thing1')" 
      ng-blur="fieldBlur('Thing1')">  
</div> 

私はディレクティブ+テンプレートを使用しようとしてきた、そしてそれは、多かれ少なかれに動作しますが、それは非常に複雑で遅いようです。

inputを再利用できるようにする良い方法はありますか?あるいは、私はエディタで多くのコピー+ペーストをすることに慣れるべきですか?

繰り返しコーディングを減らすことに加えて、たとえばすべてのフィールドのツールチップ位置を変更したい場合は、すべての要素を1か所で変更することができれば便利です。

答えて

1

多くの方法があります。このライブラリhttp://angular-formly.com/を見てください。私のプロジェクトでは、2つのフィールドコントロールのような複雑な場合にのみ、プレーンな入力と指示文を使用します。カードの有効期限のような特別なフィールド。

UPDATE

okが、これを見ては、PLSの持っています。そのまま

  1. は、あなたの属性を格納するには:Angular: better form validation solution

    あなたは3つのソリューションを持っています。

  2. 共通に使用される属性のグループをディレクティブに格納します。または、配列のプロパティを利用するディレクティブを使用します。私の例での妥当性検査指令と同様です。
  3. 第1および第2のアプローチを利用するために、transclusionを伴うディレクティブを使用する。したがって、要素の位置(ラベル、入力コントロール、エラーヒントなど)を単一の場所に入れ替えることができます。さらに、このディレクティブに... presetのようなプロパティを簡単に作成して、属性プリセットをその中に格納することができます。

これまでのように、属性の繰り返し回数を減らす方法はたくさんあります。

+0

お返事ありがとうございます。私はFormlyを見て、私は依存関係を追加せずに1)HTMLからJSへのデザイン要素を移動することなく2)を行うことを好むでしょう。また、繰り返しのコーディングを減らすことに加えて、たとえば、ツールチップの位置を変更したい場合は、すべての要素を1か所で変更することができれば便利です。 (私はこれを追加する質問を更新します) – Pippin

+0

@ピッピン、私は私の答えを更新しました。 – Kindzoku

+0

ありがとう@Kindzoku。私は答えを受け入れたが、アップヴォートすることはできない。 :(あなたが言及したオプションのいくつかを再生した後、私はcopypasta(実際にはエディタスニペットと自動コードジェネレーション)に固執することに決めました。 – Pippin

関連する問題