angular 双向数据绑定

angular的特性非常多,今天主要说说:双向数据绑定。
在传统的js代码或jquery代码中,单向数据绑定无处不在。
或许你和我一样,受够了写这些面条式的代码,代码交织在一起,分都分不清。
在真实项目中,有一个需求:
页面中有两个下拉框,第一个下拉框选择机场,第二个下拉框选择航站楼。
很明显,这是二级联动。

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Two Way Data-Binding</title>
</head>
<body ng-app>
<div ng-controller="secondController">
<select ng-model="airport" ng-options="airport.name for airport in airports">
<option value="" >choose airport</option>
</select>
<select ng-model="detail" ng-options="detail.name for detail in airport.details">
<option value="">choose detail</option>
</select>
<input type="text" value="{{airport.id}}">
</div>
<script src='javascripts/angular.js'></script>
<script>
function secondController($scope){
$scope.airports=[
{name:"首都国际机场",id:"1",details:[{name:"T1航站楼A"},{name:"T1航站楼B"},{name:"T1航站楼C"}]},
{name:"广州天河机场",id:"2",details:[{name:"T2航站楼A"},{name:"T2航站楼B"},{name:"T2航站楼C"}]},
{name:"武汉国际机场",id:"3",details:[{name:"T3航站楼A"},{name:"T3航站楼B"},{name:"T3航站楼C"}]}
]
}
</script>
</body>
</html>

代码非常简洁:js部分仅仅只有一个数据模型,而这在真实的项目中是从后端取到的。
当我看到这效果后,我自己都大吃一惊。
这如果用jquery代码来写,还不得弄个几十行。
构思一个精巧的数据模型+适合的指令=前所未有的简洁。
二级联动实现了,三级联动还远吗?
让我们来实现一个常见的省市县三级联动。

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Two Way Data-Binding</title>
</head>
<body ng-app>
<div ng-controller="secondController">
<select ng-model="province" ng-options="province.name for province in provinces">
<option value="" >choose province</option>
</select>
<select ng-model="city" ng-options="city.name for city in province.citys">
<option value="">choose city</option>
</select>
<select ng-model="county" ng-options="county.name for county in city.countys">
<option value="">choose county</option>
</select>
</div>
<script src='/vendors/angular/angular.min.js?v=2.1.3'></script>
<script>
function secondController($scope){
$scope.provinces=[
{name:"湖北省",
citys:[
{name:"武汉市",countys:[{name:"武昌"},{name:"汉口"}]},
{name:"咸宁市",countys:[{name:"咸安"},{name:"温泉"}]}
]
},
{name:"湖南省",
citys:[
{name:"长沙市",countys:[{name:"岳麓区"},{name:"芙蓉区"}]},
{name:"衡阳市",countys:[{name:"衡山县"},{name:"衡山县"}]}
]
},
{name:"江西省",
citys:[
{name:"九江市",countys:[{name:"九江县"},{name:"庐山区"}]},
{name:"南昌市",countys:[{name:"南昌县"},{name:"莲塘镇"}]}
]
}
]
}
</script>
</body>
</html>

你可以看到难点关键在于构建数据模型啊。
它完全让你放开手脚,不用再关注事件绑定,而把重心放在数据模型上。
这不能不说是一种前所未有的开发模式。