0

我正在努力让“选择”与 Angular 选择元素的“track by”一起工作。我有以下选择:

    <select id="licenseType" ng-model="selectedLicense" 
            ng-options="key for (key, value) in licenseMap track by key" 
            ng-change="doUpdate()">
    </select> 

用这个js:

$scope.selectedLicense = $scope.licenseMap["Please Select"];

当我摆脱“按键跟踪”时,上面的 js 起作用 - 初始选择被预设。使用“按键跟踪”,预选是空白的。我需要“按键跟踪”来获取选定的值,这是迄今为止唯一有效的方法。到目前为止,我已经尝试过以下组合,但没有成功:

/*
var license = document.getElementById('licenseType');
license.options.selectedIndex = 1;
license.options[license.options.selectedIndex].selected = true;
$("#licenseType").val("Please Select");
$('#licenseType').children('option[value="1"]').attr('selected', true);     
*/

我将非常感谢这里的一些帮助,让它发挥作用。谢谢你。

4

1 回答 1

2

做这样的事情:http ://codepen.io/alex06/pen/XjarJd

div(data-ng-app="app")
 div(ng-controller="appController")
   select.form-control(ng-model="selectedItem", ng-options="option.value as option.name for option in typeOptions track by option.value" ng-init="selectedItem=typeOptions[0]")


(function(){
  'use strict'
  angular
    .module('app', [])
    .controller('appController', ['$scope', function($scope){

      $scope.typeOptions = [
        { name: 'Feature', value: 'feature' }, 
        { name: 'Bug', value: 'bug' }, 
        { name: 'Enhancement', value: 'enhancement' }
       ];
    }])
})()

这个例子是用jade制作的,但语法几乎相同。顺便说一句,如果你仍然想使用对象而不是数组,你也可以这样做:

<!DOCTYPE html>
<html ng-app="app">

<head>
  <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.1.5/angular.min.js">              </script>
  <link rel="stylesheet" href="style.css" />
  <script type="text/javascript">
    angular.module('app', [])
      .controller('IndexCtrl', ['$scope', function($scope) {
        $scope.types = {
          1: "value1",
          2: "value2",
          5: "value3"
        };
      }]);
    </script>
  </head>
  <body ng-app="app" ng-controller="IndexCtrl">
    <select ng-model="type" ng-options="k as v for (k, v) in types">
      <option value="">Please select</option>
    </select>
  </body>

</html>
于 2016-09-29T21:45:14.603 回答