AngularJS Multiple选择不显示预选选项

时间:2017-01-26 15:32:31

标签: angularjs html5

当我需要为表单上的实体分配多个值时,我早上参与解决方案的大部分时间。

所以,我的想法是我有一个名为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/

1 个答案:

答案 0 :(得分:1)

您的代码中存在拼写错误。

在控制器定义中的If Defined之后添加逗号

If Not Defined

我已经分配了你的jsfiddle,它正如你预期的那样工作。