私はこのコードを持っています:
<tr ng-repeat="doc in providers">
<td><input type="checkbox" ng-true-value="{{doc.provider.Id}}" ng-false-value="" ng-model="ids"></td>
</tr>
{{ids}}
配列のチェックボックスの値を取得したい
私はこのコードを持っています:
<tr ng-repeat="doc in providers">
<td><input type="checkbox" ng-true-value="{{doc.provider.Id}}" ng-false-value="" ng-model="ids"></td>
</tr>
{{ids}}
配列のチェックボックスの値を取得したい
ng-true-value
文字列のみを受け入れるため、回避策を使用する必要があります。これは、しばらくの間、機能のリクエストでした。それまでの間、これを行うことができます:
ids
次のようなコントローラーでオブジェクトを作成します。
$scope.ids = {};
ng-model
そのオブジェクトのキーを参照するように変更します。デフォルトのtrue/false
チェックボックス値を使用できます。
<td><input type="checkbox" ng-model="ids[doc.provider.Id]"></td>
ids
次に、をチェックしてキーをループできますtrue
。
私は角度でこれを行うためのオプションが本当に好きではないと言うことから始めます。これが受け入れられた回答よりも優れているとは言えませんが、モデル内のデータは保持されます。
マークアップ:
<tr ng-repeat='(index, doc) in provider'>
<td><input type='checkbox' ng-true-value='{{doc.provider.Id}}' ng-model='ids[index]' /></td>
</tr>
<span ng-repeat='id in ids'>{{id}} </span>
ここで、配列値を $watch し、コントローラーで変更されたときにフィルター処理します (必ずオブジェクトの等価パラメーターを渡すようにしてください)。
$scope.ids = [];
$scope.updateIds = function() {
$scope.ids = $scope.ids.filter(function(id) {
return !!id;
});
};
$scope.$watch('ids', $scope.updateIds, true);
この質問に答え始めたとき、最も慣用的なオプションは、入力に ng-change ディレクティブを追加することだと思いました。
<input type='checkbox' ng-true-value='{{doc.provider.Id}}' ng-model='ids[index]' ng-change='updateIds()'/>
残念ながら、これは期待どおりに機能しません。値を削除すると、UI が正しく更新されません。また、repeat ディレクティブなしでこれを実行できることも指摘しておきます。
<input type='checkbox' ng-true-value='1' ng-model='ids.0' />
<input type='checkbox' ng-true-value='2' ng-model='ids.1' />
<input type='checkbox' ng-true-value='3' ng-model='ids.2' />
<input type='checkbox' ng-true-value='4' ng-model='ids.3' />
<input type='checkbox' ng-true-value='5' ng-model='ids.4' />
<input type='checkbox' ng-true-value='6' ng-model='ids.5' />
この場合、 $watch は、各入力に ng-change を追加するよりも確実に優れています。最後に、これが動作するplunkrです。$watch 関数は、ボックスがオンまたはオフになるたびに 2 回実行されることになりますが、実際にはそうあるべきです!