1、城市数据定义:每个城市对象包括id,parent,name属性,id为每个城市省份独有,parent是根据父级省份或城市而定
2、通过ng-options指令来遍历出城市数据
2.5.1 城市数据模型
通过\$scope.cities定义数据模型
$scope.cities=[ { id:1, parent:0, name:'四川省' }, { id:2, parent:1, name:'成都市' }, ... ]
2.5.2 html中渲染城市数据
通过ng-options指令和ng-model指令遍历数据和设置默认值
<div> <label>出生地</label> <div> <select ng-model="data.province" ng-options="c.id as c.name for c in cities"> <option value="">-- 请选择 --</option> </select> </div> </div>
说明:
1、ng-options=”obj.name for obj in datas” 常见用法,通过 obj.id as obj.name设置option标签的value值为id,内容为name
2、ng-model可用于设置select的默认值
2.5.3 定义过滤器用于过滤省份,城市等
.filter("cityFilter",function(){ return function(input,parent){ var filtedData=[]; angular.forEach(input,function(value,key){ if(value.parent===parent){ filtedData.push(value) } }) return filtedData; } })
说明:
1、如上通过定义cityFilter,传入一个parent作为参数,遍历传入的数据,并宽判断是否与传入的parent相等来确定当前城市是哪一级
2、返回的filtedData即是过滤结果。
3、用到了angular.forEach(obj,fn)迭代器,其中fn有三个参数传入,分别是value,key,obj;value即为当前遍历出的对象,key为遍历的唯一标识,obj为被遍历的数组或对象本身。
使用(省份): ng-options="c.id as c.name for c in cities|cityFilter:0"
2)、城市对应选择
1、根据data.province作为过滤参数,进行城市筛选
2、区域的选择同理,可设置当选择了城市后,再出现区域选项框(ng-show指令)
<div> <select ng-model="data.cities" ng-options="c.id as c.name for c in cities|cityFilter:data.province"> <option value="">-- 请选择 --</option> </select> </div> <div ng-show="!myForm.birthC.$pristine"> <select ng-model="data.district" ng-options="c.id as c.name for c in cities|cityFilter:data.cities"> <option value="">-- 请选择 --</option> </select> </div>
2.6 表单提交
1、功能需求:当表单验证不通过时,使提交按钮失效(ng-disabled),
html结构:
<div> <input type="reset" value="重置" ng-click="reset()"> <input type="submit" value="提交" ng-disabled="myForm.$invalid"> </div>
js:
$scope.reset=function(){ $scope.myForm.$setPristine(); }
注:表单中有一个$setPristine()方法将表单复位原始状态,class,$dirty,$pristine会恢复原始状态。但注意表单的错误信息$error并不会被隐藏,所以在验证表单时,记得在每一项错误信息都是由$dirty才判断的。