不能从我的控制器中设置select value, Angular JS

Can't set select value from my controller, Angular JS

本文关键字:value Angular JS select 设置 我的 控制器 不能      更新时间:2023-09-26

从这个例子

我试图从我的控制器设置选择值,这对我不起作用,即使我在这里设置了许多问题中解释的id。唯一的区别是我用ng-init设置了一个默认值。如何从控制器设置值?

DOM:

<select ng-model="storeorder" ng-init="storeorder = 0" ng-change="storeOrderChange(storeorder)">
    <option value="0">-- All orders --</option>
    <option ng-repeat="obj in orders" value="{{ obj.id }}">{{ obj.name }}</option>
</select>

JS内部函数:

$scope.orders = data;
$scope.storeorder = parseInt($scope.order); // Tried without parseInt also

console.log($scope.storeorder)返回正确的值,但它没有在浏览器DOM中设置正确的值。

如果您不想使用ng-options(这是正确的方式),您可以尝试使用

ng-selected : Working Demo : http://jsfiddle.net/nf2m0rr1/
Example : 
 <body ng-app ng-controller="OrderCtrl">
   <div>Order is: {{storeorder}}</div>
   <select ng-model="storeorder">
     <option ng-selected="{{order.value == storeorder}}" ng-repeat="order in orders"   value="{{order.value}}">{{order.displayName}}</option>
   </select>
 </body>
 function OrderCtrl($scope) {
  $scope.storeorder = 2;
  $scope.orders = [{
    value: '1',
    displayName: 'Order One'
  }, {
    value: '2',
    displayName: 'Order Two'
  }]
}

使用ng-options:

<select ng-model="storeorder" ng-init="storeorder = 0" ng-change="storeOrderChange(storeorder)" ng-options="obj.id as obj.name for obj in orders">

ng-options解决了50%的问题,但我仍然需要处理DOM中的默认值并更改ng-init选项。这真的让我很困扰。下面是完整的解决方案,它使我不需要从控制器设置任何内容:

<select ng-model="storeorder" ng-options="orderdata.id as orderdata.name for orderdata in orders" ng-init="storeorder = order == 0 ? 0 : order" ng-if="orders.length > 0" ng-change="storeOrderChange(storeorder)">
    <option value="">-- All orders --</option>
</select>