ng-select ng-options ng-repeat的用法與區別

 
ng-options ng-repeat的用法

工做中總會遇到關於下拉選項的一些操做,可是常常會遇到一些問題,基本上都是如下問題:數組

- 下拉框使用ng-options和ng-repeat的區別
- 下拉框的默認選項的問題
- 下拉框的model值如何綁定
- 下拉框的禁用選項問題
- 下拉框的分組和排序的問題app

 

ng-repeat和ng-options的用法 
ng-repeat是經過數組來循環HTML代碼來建立下拉列表,ng-repeat綁定到ngModel的值只能是字符串。 
ng-options的列表項能夠是對象和數組循環輸出,不少時候使用ng-options更方便。google

(1)看一個數據的列表項是數組的例子:url

<script>
var app = angular.module('myApp', []);
app.controller('myCtrl', function($scope) {
    $scope.names = ["Google", "Runoob", "Taobao"];
});
</script>

a. 使用ng-options循環數據:spa

<div ng-app="myApp" ng-controller="myCtrl">
    <select ng-init="selectedName = names[0]" ng-model="selectedName" ng-options="x for x in names">
    </select>
</div>

注意,這裏的ng-init能夠直接將下拉列表的第一個值設置爲默認值。code

b. 使用ng-repeat循環數據:對象

<div ng-app="myApp" ng-controller="myCtrl">
    <select>
        <option ng-repeat="x in names">{{x}}</option>
    </select>
</div>

(2)數據的列表項是對象blog

$scope.sites = [
    {site : "Google", url : "http://www.google.com"},
    {site : "Runoob", url : "http://www.runoob.com"},
    {site : "Taobao", url : "http://www.taobao.com"}
];
$scope.selectedSite=$scope.sites[0];  //這一句直接將下拉列表的第一個值做爲默認值

a. 使用ng-repeat就會有侷限性,選擇的值只能是一個字符串:排序

<select ng-model="selectedSite">
<option ng-repeat="x in sites" value="{{x.url}}">{{x.site}}</option>
</select>

<h1>你選擇的是: {{selectedSite}}</h1>

b. 使用ng-options選擇的值就是一個對象:ip

<select ng-model="selectedSite" ng-options="x.site for x in sites">
</select>

<h1>你選擇的是: {{selectedSite.site}}</h1>
<p>網址爲: {{selectedSite.url}}</p>

從上面兩個例子,能夠看出ng-options和ng-repeat的區別有如下幾個方面:
1. ng-options必定要和ng-model搭配,這裏的ng-model獲取的就是列表的一個對象。
ng-repeat的value值類型是string。
2. 設置首選項有兩個方法,ng-init和直接js賦值,也能夠添加一個未選中的選項:

<select ng-model="selectedSite" ng-options="x.site for x in sites">
    <option value="">-- 選擇一個地址 --</option>
</select>

 

關於ng-repeat的其餘用法

在實際的應用場景中,咱們須要一個表格來管理信息,這時候使用ng-repeat的$index能夠知道是哪一行被操做了。具體看一個例子:

<table>
    <tr ng-repeat="x in list">
        <td>{{x.name}}</td>
        <td><input type="button" value="我是第{{$index}}行的按鈕"
              ng-click="onClick($index)"></td>
    </tr>
</table>
$scope.onClick = function (index) {
    alert("點擊了第"+index+"行的按鈕");
};

要注意的是,$index是從0開始計算的。

 

ng-options的分組和排序的功能

(1) ng-options支持group by語法進行分組。

$scope.colors = [
    {name: '黑色', color: 'black', type: "暗色"},
    {name: '白色', color: 'white', type: "亮色"},
    {name: '紅色', color: 'red', type: "暗色"},
    {name: '藍色', color: 'blue', type: "暗色"},
    {name: '黃色', color: 'yellow', type: "亮色"}
];
<select ng-model="colorChosen" ng-options="color.name group by color.type for color in colors">

結果會根據「暗色」和「亮色」分組。
(2)ng-options支持orderBy過濾器對結果排序

<select ng-model="colorChosen" ng-options="color.name group by color.type for color in colors | orderBy:'name' ">
</select>

結果會根據「暗色」和「亮色」分組,在分組裏根據字符順序排序。


ng-options禁用某些選項
$scope.colors = [
    {name: '黑色', color: 'black', type: "暗色"},
    {name: '白色', color: 'white', type: "亮色", disabled: false},
    {name: '紅色', color: 'red', type: "暗色", disabled: true},
    {name: '藍色', color: 'blue', type: "暗色", disabled: false},
    {name: '黃色', color: 'yellow', type: "亮色", disabled: true}
];
<select ng-model="colorChosen"
        ng-options="color.name group by color.type
        disable when color.disabled for color in colors">
相關文章
相關標籤/搜索