我的角度应用中有一个与模型绑定的选择元素。当我更改模型角度时,由于某种原因,添加了一个额外的选项,其值为“?”。 Here is a jsFiddle来说明我的观点。为什么会发生这种情况以及如何避免?
angular.module('angularApp', []);
function testCtrl($scope, $timeout)
{
$scope.options = [1,2,3];
$scope.initialSelectedValue = 2;
$timeout(function(){
$scope.options = [4,5,6];
}, 3000)
}
<div ng-app="angularApp">
<div ng-controller="testCtrl">
<select ng-model="initialSelectedValue" ng-options="option for option in options"></select>
</div>
</div>
编辑:我知道我可以简单地添加一个带有value =“”的选项作为快速修复,但在我的情况下,我不能没有这个选项。
答案 0 :(得分:2)
这种情况正在发生,因为您正在更改中间的列表,而ViewModel initialSelectedValue
(名称不佳,因为它不仅仅是初始值,而是实际的当前选定值)是悬挂的,而不是指向select
的任何有效选项。
这样做是为了使模型不会“隐藏”,并且只能由控制器或输入中的更改显式设置/更改。
要解决此问题,只需在更改列表时将模型更改为其中一个可用选项:
$scope.options = [1,2,3];
$scope.selectedValue = 2; // I changed the name
$timeout(function(){
$scope.options = [4,5,6];
$scope.selectedValue = $scope.options[0];
}, 3000)