为什么我的ng-options设置了默认值?

时间:2015-02-04 07:17:22

标签: angularjs

我有一个如下所示的角度控制器;

controllers.controller('editCodeReviewCtrl', ($scope, $rootScope, $modalInstance, User, reviewRequestId, reviewRequestDetail, reviewRequestValue, reviewRequestTitle) -> 
  console.log "reviewRequestvalue", reviewRequestValue
  $scope.reviewRequest = {}
  $scope.reviewRequest.id = reviewRequestId
  $scope.reviewRequest.detail = reviewRequestDetail
  $scope.reviewRequest.value = '25.0'
  $scope.reviewRequest.title = reviewRequestTitle
  $scope.values = [
    {value: '10.0'},
    {value: '25.0'},
    {value: '50.0'} ]
)

我的视图模板如下所示;

    <select ng-model="reviewRequest.value" ng-options="ele.value for ele in values" name="value" required class="friendly-margin pull-right">
    </select>

我希望我的下拉列表会设置默认值,在此示例中,它应设置为&#39; 25.0&#39;但是我没有在浏览器中观察到这种行为。

注意正在输出的html

<select ng-model="reviewRequest.value" ng-options="ele.value for ele in values" name="value" required="" class="friendly-margin pull-right ng-pristine ng-valid ng-valid-required ng-touched">
<option value="?" selected="selected" label=""></option>
<option value="0" label="10.0">10.0</option>
<option value="1" label="25.0">25.0</option>
<option value="2" label="50.0">50.0</option>
</select>

进行此调试的方向是什么?

我也看过这篇文章how to use ng-option to set default value of select element,这与我自己编写代码的方式一致。

2 个答案:

答案 0 :(得分:4)

正如the documentation所解释的那样,当您使用

等表达式时
label for value in array

选择框中显示的内容为label,绑定到ngModel的内容为value。所以,在你的表达中:

ng-model="reviewRequest.value" ng-options="ele.value for ele in values"

ele是值数组中的对象之一。如果您希望对象{value: '25.0'}是在选择框中选择的对象,则您的ngModel应该是对此对象的引用(不是相同的副本!):

因此,您的控制器应将reviewRequest.value设置为$scope.values[1]

或者,如果您希望ngModel包含字符串25.0而不包含包含此值的对象,则表达式应为

ng-options="ele.value as ele.value for ele in values"

答案 1 :(得分:1)

在controller $ scope.reviewRequest.value = $ scope.values [1];