当我需要为表单上的实体分配多个值时,我早上参与解决方案的大部分时间。
所以,我的想法是我有一个名为QualityData的实体,这个实体可以有不同的MechanismIdentifier。
我想到的最佳解决方案,使用multiple select
。
所有这些都能很好地结合这些解决方案:
AngularJS selecting multiple options
Get value when selected ng-option changes
我可以访问所选选项的数组,将其分配给我的实体等...但我有一个“次要的”后备,这是我无法获得预选的选项(那些将来自当使用动态方法(例如<option ng-repeat>
或ng-options
)时,在加载数据以进行编辑时,服务器将在选择字段中突出显示,只有在对选项进行硬编码时才会起作用。另一个错误是,如果我希望添加的值多于预选数组中的值,它将在使用动态方法时擦除其中存在的所有值,在编码时工作正常。
标记:
<select multiple ng-change="showAlert(selectedValues)" ng-model="selectedValues">
<!--ng-options="resDatasIdOfMechanism as resDatasIdOfMechanism.name for resDatasIdOfMechanism in resDatasIdOfMechanisms track by resDatasIdOfMechanism.id" value="resDatasIdOfMechanism.id">-->
<option value="1">{{resDatasIdOfMechanisms[0].name}}</option>
<option value="2">{{resDatasIdOfMechanisms[1].name}}</option>
<option value="3">{{resDatasIdOfMechanisms[2].name}}</option>
</select>
如果我尝试使用已注释的行,那么当标记的选项不起作用时
控制器:
$scope.selectedAlready = [{id:1, name:"Based on Antibiogram"}];
$scope.selectedMechanisms=[];
$scope.resDatasIdOfMechanisms = [{id:1,name:"Based on Antibiogram"}, {id:2,name:"Molecular"}, {id:3,name:"Genetic"}];
$scope.selected = $scope.selectedAlready;
$scope.selectedValues = [];
$scope.$watch('selected', function(nowSelected){
$scope.selectedValues = [];
if( ! nowSelected ){
return;
}
angular.forEach(nowSelected, function(val){
$scope.selectedValues.push( val.id.toString());
console.log("look");
});
});
$scope.showAlert=function(listOfMultipleChoices){
//alert(object);
}
编辑添加jsfiddle链接,但仍然没有找到原始问题的解决方案:https://jsfiddle.net/StevenEvenSteven/ybapx09w/
答案 0 :(得分:1)