[转]AngularJS 之 ng-options指令

原文地址

一. 基本下拉效果(lable for value in array)

其中select标签中的ng-model属性必须有,其值为选中的对象或属性值。

<div ng-controller="ngselect">
    <p>usage:label for value in array</p>
    <p>选项,{{selected}}</p>
    <select ng-model="selected" ng-options="o.id for o in optData">
        <option value="">-- 请选择 --</option>
    </select>
</div>
m1.controller("ngselect",['$scope',function($sc){
    $sc.selected = '';
    $sc.optData = [{
        id: 10001,
        MainCategory: '男',
        ProductName: '水洗T恤',
        ProductColor: '白'
    },{
        id: 10002,
        MainCategory: '女',
        ProductName: '圓領短袖',
        ProductColor: '黃'
    },{
        id: 10003,
        MainCategory: '女',
        ProductName: '圓領短袖',
        ProductColor: '黃'
    }];
}]);

二. 自定义下拉显示名称(label for value in array)

label可以根据需要拼接出不同的字符串

<div ng-controller="ngselect2">
    <p>usage:label for value in array(label可以根据需求拼接出不同的字符串)</p>
    <p>选项,{{selected}}</p>
    <select ng-model="selected" ng-options="(o.ProductColor+'-'+o.ProductName) for o in optData">
        <option value="">-- 请选择 --</option>
    </select>
</div>
m1.controller("ngselect2",['$scope',function($sc){
    $sc.selected = '';
    $sc.optData = [{
        id: 10001,
        MainCategory: '男',
        ProductName: '水洗T恤',
        ProductColor: '白'
    },{
        id: 10002,
        MainCategory: '女',
        ProductName: '圓領短袖',
        ProductColor: '黃'
    },{
        id: 10003,
        MainCategory: '女',
        ProductName: '圓領短袖',
        ProductColor: '黃'
    }];
}]);

三. ng-options 选项分组

group by分组项

<div ng-controller="ngselect3">
    <p>usage:label group by groupName for value in array</p>
    <p>选项,{{selected}}</p>
    <select ng-model="selected" ng-options="(o.ProductColor+'-'+o.ProductName) group by o.MainCategory for o in optData">
        <option value="">-- 请选择 --</option>
    </select>
</div>
m1.controller("ngselect3",['$scope',function($sc){
    $sc.selected = '';
    $sc.optData = [{
        id: 10001,
        MainCategory: '男',
        ProductName: '水洗T恤',
        ProductColor: '白'
    },{
        id: 10002,
        MainCategory: '女',
        ProductName: '圓領长袖',
        ProductColor: '黃'
    },{
        id: 10003,
        MainCategory: '女',
        ProductName: '圓領短袖',
        ProductColor: '黃'
    }];
}]);

四. ng-options 自定义ngModel的绑定

下面selected的值为optData的id

<div ng-controller="ngselect4">
    <p>usage:select as label for value in array</p>
    <p>选项,{{selected}}</p>
    <select ng-model="selected" ng-options="o.id as o.ProductName for o in optData">
        <option value="">-- 请选择 --</option>
    </select>
</div>
m1.controller("ngselect4",['$scope',function($sc){
    $sc.selected = '';
    $sc.optData = [{
        id: 10001,
        MainCategory: '男',
        ProductName: '水洗T恤',
        ProductColor: '白'
    },{
        id: 10002,
        MainCategory: '女',
        ProductName: '圓領长袖',
        ProductColor: '黃'
    },{
        id: 10003,
        MainCategory: '女',
        ProductName: '圓領短袖',
        ProductColor: '黃'
    }];
}]);

五. ng-options 多级下拉

<div ng-controller="ngselect5">
    <select ng-model="selectedPerson" ng-options="obj.name for obj in people"></select>
    <select ng-model="selectedGenre">
        <option ng-repeat="label in people[selectedPerson.id].interest">{{label}}</option>
    </select>
</div>
m1.controller("ngselect5",['$scope',function($sc){
$sc.people = [
                    {
                            id: 0,
                            name: '张三',
                            interest: [
                            '爬山',
                            '游泳',
                            '旅游',
                            '美食'
                        ]
                    },
                    {
                        id: 1,
                        name: '李四',
                        interest: [
                            '音乐',
                            '美食',
                            'Coffee',
                            '看书'
                        ]
                    },
                    {
                        id: 2,
                        name: '王五',
                        interest: [
                            '音乐',
                            '电影',
                            '中国好声音',
                            '爸爸去哪了',
                            '非常静距离'
                        ]
                    },
                    {
                        id: 3,
                        name: '小白',
                        interest: [
                            '游泳',
                            '游戏',
                            '宅家里'
                        ]
                    }
                ];
}]);

六. 在 select 中禁用某些结果.

<select ng-model="myColor"
      ng-options="color.name group by color.shade disable when color.notAnOption for color in colors">
</select>

七. 官网示例参考

<script>
angular.module('selectExample', [])
  .controller('ExampleController', ['$scope', function($scope) {
    $scope.colors = [
      {name:'black', shade:'dark'},
      {name:'white', shade:'light', notAnOption: true},
      {name:'red', shade:'dark'},
      {name:'blue', shade:'dark', notAnOption: true},
      {name:'yellow', shade:'light', notAnOption: false}
    ];
    $scope.myColor = $scope.colors[2]; // red
  }]);
</script>
<div ng-controller="ExampleController">
  <ul>
    <li ng-repeat="color in colors">
      <label>Name: <input ng-model="color.name"></label>
      <label><input type="checkbox" ng-model="color.notAnOption"> Disabled?</label>
      <button ng-click="colors.splice($index, 1)" aria-label="Remove">X</button>
    </li>
    <li>
      <button ng-click="colors.push({})">add</button>
    </li>
  </ul>
  <hr/>
  <label>Color (null not allowed):
    <select ng-model="myColor" ng-options="color.name for color in colors"></select>
  </label><br/>
  <label>Color (null allowed):
  <span  class="nullable">
    <select ng-model="myColor" ng-options="color.name for color in colors">
      <option value="">-- choose color --</option>
    </select>
  </span></label><br/>

  <label>Color grouped by shade:
    <select ng-model="myColor" ng-options="color.name group by color.shade for color in colors">
    </select>
  </label><br/>

  <label>Color grouped by shade, with some disabled:
    <select ng-model="myColor"
          ng-options="color.name group by color.shade disable when color.notAnOption for color in colors">
    </select>
  </label><br/>

  Select <button ng-click="myColor = { name:'not in list', shade: 'other' }">bogus</button>.
  <br/>
  <hr/>
  Currently selected: {{ {selected_color:myColor} }}
  <div style="border:solid 1px black; height:20px"
       ng-style="{'background-color':myColor.name}">
  </div>
</div>
posted @ 2017-03-14 13:53  眼镜男  阅读(267)  评论(0编辑  收藏  举报