代码之家  ›  专栏  ›  技术社区  ›  Maris

NG选项在初始加载时不突出显示选定值

  •  0
  • Maris  · 技术社区  · 6 年前

    考虑下一个代码示例:

    http://plnkr.co/edit/LA6fu1vdzRWFaQw6Zl6S?p=preview

    <!DOCTYPE html>
    <html ng-app="app">
    
    <head>
      <meta charset="utf-8" />
      <title>AngularJS Plunker</title>
      <script src="http://code.angularjs.org/1.1.5/angular.min.js"></script>
      <script src="app.js"></script>
    </head>
    
    <body ng-controller="main">
      <select novalidate="" ng-model="selectedItem" ng-options="item.id as item.name for item in items track by item.id"> </select>
    </body>
    
    </html>
    
    
    var app = angular.module('app', [])
    
    .controller('main', ['$scope',function($scope) {
      $scope.items = [
        {"id":0,"name":"a"},
        {"id":1,"name":"b"},
        {"id":2,"name":"c"},
        {"id":3,"name":"d"}
      ];
      $scope.selectedItem = 1;
    }])
    

    我希望在初始荷载下,select元素将有一个“b”选项被选中,但它没有。我做错了什么?

    1 回复  |  直到 6 年前
        1
  •  1
  •   Aleksey Solovey    6 年前

    你需要:

    • 使用更新版本的angularjs(更改 1.1.5 1.6.10 在你的剧本里)

    • 去除 track by item.id ,用于 ng-repeat 不是 ng-options

    下面是一个工作演示:

    var app = angular.module('app', [])
    
    .controller('main', ['$scope',function($scope) {
      $scope.items = [
        {"id":0,"name":"a"},
        {"id":1,"name":"b"},
        {"id":2,"name":"c"},
        {"id":3,"name":"d"}
      ];
      $scope.selectedItem = 1;
    }])
    <!DOCTYPE html>
    <html ng-app="app">
    
      <head>
        <meta charset="utf-8" />
        <title>AngularJS Plunker</title>
        <script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.6.10/angular.js"></script>
      </head>
    
      <body ng-controller="main">
        <select novalidate=""
          ng-model="selectedItem" 
          ng-options="item.id as item.name for item in items">
        </select>
        {{selectedItem}}
      </body>
    </html>