0

私がやろうとしているのは、渡されたデータに基づいて、多数の動的ラジオ/チェックボックス フィールドを作成することです。残念ながら、このデータの形式を制御することはできませんが、仕事を終わらせるには問題ありません。

これは私が得た限りです: http://plnkr.co/edit/LKwueHUzSrC5JpeBY9So

最終的に必要なデータの形式は、次のような単純な配列です。

"school_type": [
    "Government/State",
    "International",
    "Co-educational"
]

このデータは、ラジオ ボックス、または選択されている場合はチェックボックスから取得できます。オプションが 1 つしかない場合はチェックボックスが表示され、複数ある場合はラジオが表示されます。

したがって、フィールドを表示できますが、問題は次のとおりです。

  1. ラジオ ボタンのnameプロパティが各セットで機能していないようです。
  2. 選択したチェックボックス/ラジオの値を取得する方法がわかりません...コントローラーと必要な配列に戻します。最も簡単な方法は、利用可能な ng-change プロパティを使用してこれに関数を渡すことだと思いましたが、試行するたびにエラーが発生し続けます。

どんな助けでも大歓迎です。

4

1 に答える 1

2

コードにはいくつかの問題があります。

  1. 必要な場所で補間を使用していません。
  2. コントロールをスコープにバインドしていません。

更新されたコードは次のとおりです。

<label ng-switch-when="r" class="radio">
  <div ng-repeat="option in options">
    <input type="radio" name="{{fieldname}}" ng-model="$parent.$parent.selectedid" value="{{option}}">
    <span>{{ option }}</span>
  </div>
</label>
<label ng-switch-when="c" class="checkbox">
  <input type="checkbox" name="{{fieldname}}" ng-false-value="" ng-true-value="{{options[0]}}" ng-model="$parent.selectedid">
  <span>{{ options[0] }}</span>
</label>

コントロールを正しくバインドするには$parent.$parent、ラジオ ボタンと$parentチェックボックスを使用する必要があることに注意してください。と の両方が新しい子スコープng-switchを作成するため、これが必要でした。ng-repeatそのため、チェックボックス用に 1 レベル、ラジオ ボタン用に 2 レベル上げる必要がありました。バインディングにプリミティブの代わりにオブジェクトを使用すると、これを回避できます。コードをリファクタリングして、それができるようにすることをお勧めします。この記事には、その問題に関する詳細情報があります。

最後に、Plunkerの動作バージョンを示します。

于 2013-09-14T03:47:21.563 に答える