查找在 ng 重复中选择的 ng 选项
Finding ngOption selected within ngRepeat
我有一个 table,其中填充了指令 ngRepeat
,每个项目中都有 ngOptions
。在发生变化时,我在控制器中调用函数 transactionListFilter
来找出哪个 select
发生了变化,这样我就可以将所有其他 select
重置为默认值 'Multiple'.
查看
<tr data-ng-repeat="item in $ctrl.tableData">
<td>
<select
data-ng-options="item.appAndType for item in item.serviceUIs"
data-ng-model="selectedItem"
data-ng-change="$ctrl.transactionListFilter(selectedItem)" >
<option value="">Multiple</option>
</select>
</td>
</tr>
控制器
function transactionListFilter(data) {
console.log(data)
$scope.filter = data;
};
所以它应该是这样的:
但是如果我 select 第二个 select
,第一个 select 仍然会填充一个申请号,而不是重置为 'Multiple'。当我提交 ngModel
值时,它会从 ngOptions
.
提交数据
问题
如何识别来自控制器的 selected select
,以便我可以将所有其他 select
值重置为 'Multiple'?
一种方法是选择 ng-repeat
迭代器的 属性:
<tr data-ng-repeat="item in $ctrl.tableData">
<td>
<select data-ng-options="ui.appAndType for ui in item.serviceUIs"
data-ng-model="item.selectedUi"
data-ng-change="$ctrl.transactionListFilter(item,$index)" >
<option value="">Multiple</option>
</select>
</td>
</tr>
function transactionListFilter(item, index) {
$ctrl.tableData.forEach( (_ , idx) => {
if (index != idx) {
_.selectedUi = null;
};
});
console.log(item.selectedUi, index)
};
我相信你可以在指令中使用 $index。我已经成功地在 ng-repeat with forms 中使用它。这里有一个相关的 .
<form name="formName" class="form-horizontal">
<tr ng-repeat="notify in $ctrl.Channel.notify">
<td>{{notify.severity}}</td>
<td><input type="Text" name="name{{$index}}" ng-model="notify.name" ng-maxlength="16">
<div ng-show="formName['name' + $index].$dirty" ng-messages="formName['name' + $index].$error" style="color:maroon" role="alert">
<div ng-messages-include src="formNameErrorMessages"> </div>
</div>
</td>
</tr>
</form
在你的情况下可能是这样的:
<tr data-ng-repeat="item in $ctrl.tableData">
<td>
<select name="select{{$index}}"
data-ng-options="item.appAndType for item in item.serviceUIs"
data-ng-model="selectedItem"
data-ng-change="$ctrl.transactionListFilter(selectedItem)" >
<option value="">Multiple</option>
</select>
</td>
$scope.formName['select' + $index].$dirty;
我有一个 table,其中填充了指令 ngRepeat
,每个项目中都有 ngOptions
。在发生变化时,我在控制器中调用函数 transactionListFilter
来找出哪个 select
发生了变化,这样我就可以将所有其他 select
重置为默认值 'Multiple'.
查看
<tr data-ng-repeat="item in $ctrl.tableData">
<td>
<select
data-ng-options="item.appAndType for item in item.serviceUIs"
data-ng-model="selectedItem"
data-ng-change="$ctrl.transactionListFilter(selectedItem)" >
<option value="">Multiple</option>
</select>
</td>
</tr>
控制器
function transactionListFilter(data) {
console.log(data)
$scope.filter = data;
};
所以它应该是这样的:
但是如果我 select 第二个 select
,第一个 select 仍然会填充一个申请号,而不是重置为 'Multiple'。当我提交 ngModel
值时,它会从 ngOptions
.
问题
如何识别来自控制器的 selected select
,以便我可以将所有其他 select
值重置为 'Multiple'?
一种方法是选择 ng-repeat
迭代器的 属性:
<tr data-ng-repeat="item in $ctrl.tableData">
<td>
<select data-ng-options="ui.appAndType for ui in item.serviceUIs"
data-ng-model="item.selectedUi"
data-ng-change="$ctrl.transactionListFilter(item,$index)" >
<option value="">Multiple</option>
</select>
</td>
</tr>
function transactionListFilter(item, index) {
$ctrl.tableData.forEach( (_ , idx) => {
if (index != idx) {
_.selectedUi = null;
};
});
console.log(item.selectedUi, index)
};
我相信你可以在指令中使用 $index。我已经成功地在 ng-repeat with forms 中使用它。这里有一个相关的
<form name="formName" class="form-horizontal">
<tr ng-repeat="notify in $ctrl.Channel.notify">
<td>{{notify.severity}}</td>
<td><input type="Text" name="name{{$index}}" ng-model="notify.name" ng-maxlength="16">
<div ng-show="formName['name' + $index].$dirty" ng-messages="formName['name' + $index].$error" style="color:maroon" role="alert">
<div ng-messages-include src="formNameErrorMessages"> </div>
</div>
</td>
</tr>
</form
在你的情况下可能是这样的:
<tr data-ng-repeat="item in $ctrl.tableData">
<td>
<select name="select{{$index}}"
data-ng-options="item.appAndType for item in item.serviceUIs"
data-ng-model="selectedItem"
data-ng-change="$ctrl.transactionListFilter(selectedItem)" >
<option value="">Multiple</option>
</select>
</td>
$scope.formName['select' + $index].$dirty;