我用 Angular 定义了这个选择框
<select data-ng-model="data.hours" data-ng-options="value for value in range.hours" class="dateSelect"></select>
<select data-ng-model="data.minutes" data-ng-options="value for value in range.minutes" class="dateSelect"></select>
<select data-ng-model="data.period" data-ng-options="value for value in range.period" class="dateSelect"></select>
和 Controller 定义默认值:
$scope.data.hours = currentHours > 12 ? parseInt($scope.range.hours[currentHours - 13]) : parseInt($scope.range.hours[currentHours -1]);
$scope.data.minutes = parseInt(date.getMinutes());
$scope.data.period = currentHours> 12 ? 'PM' : 'AM';
我的默认值数组:
$scope.range.hours = [1,....,12];
$scope.range.minutes = [0,....,59];
$scope.range.period = ['AM','PM'];
一切正常,除非我要选择的默认值是每个数组中的最后一个 所以如果我想要:11 小时 58 分钟,AM 它工作正常并且选择中的元素对用户可见。 如果我想要:12 小时 59 分钟,PM 盒子是空的,当我检查元素时我得到这个:
<option value="? string:PM ?"></option>
似乎无法弄清楚问题是什么......
编辑:范围周期数组上的拼写错误。
EDIT2:在尝试了我能想到的一切之后,决定将范围更改为对象数组。 它们是这样定义的:
range.period = [{label:"AM",value:"AM"},{label:"PM",value:"PM"}];
标记也发生了变化:
<select data-ng-model="data.period" data-ng-options="opt as opt.label for opt in range.period" class="dateSelect"></select>
模型是这样设置的:
$scope.data.period = currentHours> 12 ? $scope.range.period[1] : $scope.range.period[0];
由于我将整个对象传递给数据,因此我需要在将数据对象提交给后端之前添加一个变通方法,这样它只会传递选定的值。
$scope.data.period = $scope.data.period.value;
这是一个糟糕的解决方案,但这是我能做的最好的解决方案。希望我能找到以前的实现有什么问题(现在只是想知道,出于好奇。) 希望这对遇到同样问题的人有所帮助。
最佳答案
您缺少引号,这可能会破坏您的代码:
$scope.range.period = ['AM','PM'];
关于javascript - 无法使用 ng-option 选择数组的最后一个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26678910/