Angular选择不显示下拉默认值

时间:2015-08-12 20:10:42

标签: javascript html angularjs drop-down-menu

我在html下面有这个

<select name="reason" class="form-control" ng-model="reasonSelected" 
ng-options="reason for reason in reasonList" required></select>

在我的角度控制器的开头我有

$scope.reasonSelected = $scope.item.stsChangeReason;
$log.debug("$scope.reasonSelected = " + $scope.reasonSelected);

将以下打印到控制台,但仍然没有默认

LOG: $scope.reasonSelected = someValue

以及其他一些初始化函数

$scope.reasonList = response;

如果我这样做

$scope.reasonSelected = $scope.reasonList[0];

然后我看到一个默认值。我错过了一些明显的东西吗?

3 个答案:

答案 0 :(得分:3)

这是AngularJS中的一个常见错误。要设置为默认值,您需要确保reasonSelected范围变量持有对所需reasonList范围数组变量项的引用(正如您在调查中看到的那样)。

根据您是否使用一系列字符串或对象或其他内容,您的问题的答案会略有不同。

编辑:问题是您的ng-options参数不正确。使用select as label for value in array综合表达式。请注意as

<select name="reason" class="form-control" ng-model="reasonSelected" 
    ng-options="reason as reason for reason in reasonList" required></select>

假设一个字符串数组:http://plnkr.co/edit/06c5pQ?p=preview

答案 1 :(得分:0)

我必须看到您用于ng-options的数据,但听起来您没有将其初始化为您想要的值。您可能需要执行ng-options="reason.id as reason.name for reason in reasonList"之类的操作,具体取决于您的数据,但根据它的声音$scope.reasonSelected = $scope.reasonList[0];听起来很正常。查看同一问题的其他答案:

https://stackoverflow.com/a/17329854/1078450

答案 2 :(得分:0)

我做了这个并且有效

$scope.reasonSelectedSaved = $scope.item.stsChangeReason;

在init函数中

$scope.reasonList = response;
$scope.reasonSelected = $scope.reasonSelectedSaved;

并使用手表我更新了新选择的原因

$scope.$watch('reasonSelected', function () {
        $scope.item.stsChangeReason = $scope.reasonSelected;
    });