建议对ionic和AnjularJs有一定了解的人可以用到,很多时候我们要用到选择省份、城市、区县的功能,现在就跟着我来实现这个功能吧,用很少的代码(我这里是根据客户的要求,只显示想要显示的部分省份和其相对应的城市、区县,并且这些数据将通过后台放入数据库,并没有引用完整的城市js)
1.首先在所需要的HTML页面需要这些代码,其中的样式都是自己定义的,不喜欢的可以按照自己喜好来写:
<div class="list"><div class="list" style="border: 0;"><label class="item item-input item-select" style="border: 0"><div class="input-label"><span><span style="color: #6e6e6e"> </span></span></div><select style="font-size: 16px" ng-model="data.currentProvinceId"ng-options="pp.Id as pp.RegionName for pp in allProvinces"ng-change="switchProvince(data.currentProvinceId)"></select></label></div><div class="list" style="border: 0"><label class="item item-input item-select" style="border: 0"><div class="input-label"><span><span style="color: #6e6e6e"> </span></span></div><select style="font-size: 16px" ng-options="cc.Id as cc.RegionName for cc in cities"ng-model="data.currentCityId" ng-change="switchCity(data.currentCityId)"></select></label></div><div class="list" style="border: 0"><label class="item item-input item-select" style="border: 0"><div class="input-label"><span style="color: #6e6e6e"> </span></div><select style="font-size: 16px" ng-options="aa.Id as aa.RegionName for aa in areas"ng-model="data.currentAreaId" ng-change="switchArea(data.currentAreaId)"></select></label></div></div>
2.相应的控制器controller.js里:
.controller('selectCityCtrl', function ($rootScope, $scope, $state, $filter, $ionicHistory, selectCitySvc, storageSvc, scollImageSvc, classIficationItemSvc) {$scope.currentCity = selectCitySvc.getCurrentCity();$scope.allRegions = selectCitySvc.getCacheAllAreas();$scope.allProvinces = [{Id: 0, RegionName: '请选择省份'}];$scope.cities = [{Id: 0, RegionName: '请选择城市'}];$scope.areas = [{Id: 0, RegionName: '请选择区/县'}];$scope.data = {selectName: "",currentProvinceId: 0,currentCityId: 0,currentAreaId: 0};function getSelectedRegionId() {var regionId = $scope.data.currentAreaId;if (regionId == 0) {regionId = $scope.data.currentCityId;}if (regionId == 0) {regionId = $scope.data.currentProvinceId;}return regionId;}function updateSelectRegionName() {var currentRegion = $filter('filter')($scope.allRegions, {Id: getSelectedRegionId()}, true)[0];if (currentRegion) {$scope.data.selectName = currentRegion.RegionName} else {$scope.data.selectName = '';}}$scope.switchProvince = function (currentProvinceId) {$scope.data.currentCityId = 0;$scope.data.currentAreaId = 0;$scope.cities.splice(1);$scope.areas.splice(1);var cities = $filter('filter')($scope.allRegions, {RegionType: 1, ParentId: currentProvinceId});for (var i in cities) {$scope.cities.push(cities[i]);}updateSelectRegionName();};$scope.switchCity = function (currentCityId) {$scope.data.currentAreaId = 0;$scope.areas.splice(1);var areas = $filter('filter')($scope.allRegions, {RegionType: 2, ParentId: currentCityId});for (var i in areas) {$scope.areas.push(areas[i]);}updateSelectRegionName();};//增加当切换县区的时候更换服务区名$scope.switchArea = function (currentAreaId) {updateSelectRegionName();};var allProvinces = $filter('filter')($scope.allRegions, {RegionType: 0});for (var i in allProvinces) {$scope.allProvinces.push(allProvinces[i]);}if ($scope.currentCity.RegionType == 0) {// 如果上次选择省份$scope.data.currentProvinceId = $scope.currentCity.Id;$scope.switchProvince($scope.currentCity.Id);} else if ($scope.currentCity.RegionType == 1) {var province = $filter('filter')($scope.allRegions, {Id: $scope.currentCity.ParentId}, true)[0];$scope.data.currentProvinceId = province.Id;//省份$scope.switchProvince(province.Id);$scope.data.currentCityId = $scope.currentCity.Id;$scope.switchCity($scope.currentCity.Id);} else if ($scope.currentCity.RegionType == 2) {// 如果上次选择县区var city = $filter('filter')($scope.allRegions, {Id: $scope.currentCity.ParentId}, true)[0];var province = $filter('filter')($scope.allRegions, {Id: city.ParentId}, true)[0];$scope.data.currentProvinceId = province.Id;$scope.switchProvince(province.Id);$scope.data.currentCityId = city.Id;$scope.switchCity(city.Id);$scope.data.currentAreaId = $scope.currentCity.Id;}$scope.user = {province: "" || storageSvc.load('province.RegionName'),city: "" || storageSvc.load('city.RegionName'),area: "" || storageSvc.load('area.RegionName'),currentCity: "" || storageSvc.load('selectCitySvc.getCurrentCity()')};});
3.效果如图: