在Angular中更改选择元素的模型会添加一个值为"?"的选项。

时间:2015-02-03 19:16:39

标签: angularjs angular-directive

我的角度应用中有一个与模型绑定的选择元素。当我更改模型角度时,由于某种原因,添加了一个额外的选项,其值为“?”。 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 =“”的选项作为快速修复,但在我的情况下,我不能没有这个选项。

1 个答案:

答案 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)