建议对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.效果如图:

       

ionic+AnjularJs实现省市县三级联动效果的更多相关文章

  1. jQuery - 全国省市县三级联动

    最近有空用jquery做了一个全国省市县的三级联动,在以后或许可以用的到 ,遗憾的是我还没用封装,等有空看能不能封装成一个插件 废话不多说,贴上代码: <!doctype html> &l ...

  2. wex5 实战 省市县三级联动与地址薄同步

    无论是商城,还是快递,都要用到省市县三级联动,和地址薄,今天就以实战来制作,难点有3个: 1:三级联动,有wex5组件实现,相对简单,实战里对行数据进行了拼接 2:  地址薄选项,利用inputSel ...

  3. php仿经典省市县三级联动

    之前有个需求要写个类似省市县三级联动的页面,于是,网上找了点资料看了下,其实原理很简单: 当我们选择一级栏目中某条记录的时候,会获取该栏目的vaule值,并发起ajax请求,后台根据这个vaule值, ...

  4. 项目总结01:JSP mysql SpringMvc下中国省市县三级联动下拉框

    JSP mysql SpringMvc下中国省市县三级联动下拉框 关键词 JSP  mysql数据库  SpringMvc  ajax   Controller层  Service层  中国地区  省 ...

  5. 省市县三级联动 sql语句

    发现在网上的省市县三级联动大部分是mysql的.就算是sqlserver的,也不准确.于是就把mysql的给改了下,适用sqlserver.sql语句如下: CREATE TABLE Dic_Area ...

  6. Android 省市县 三级联动(android-wheel的使用)[转]

    转载:http://blog.csdn.net/lmj623565791/article/details/23382805 今天没事跟群里面侃大山,有个哥们说道Android Wheel这个控件,以为 ...

  7. Android 省市县 三级联动(android-wheel的使用)

    转载请注明出处:http://blog.csdn.net/lmj623565791/article/details/23382805 今天没事跟群里面侃大山,有个哥们说道Android Wheel这个 ...

  8. PyQt5--基础篇:用eric6工具实现三级联动效果

    今天给大家介绍下python gui界面的三级联动效果,我们用工具eric6来实现,先看下效果图. 首先我们先创建项目linkage,再新建窗体进入到Qt设计师工具开始设计界面,完成后保存并退出. 在 ...

  9. js之省市区(县)三级联动效果

    省市区(县)三级联动效果,是我们软件开发比较常用的,特别是对一些crm,erp之类,当然也包括其他的后台管理系统,基本都涉及到,今天贴出这个常用的,方便个人复用和大家使用 <!DOCTYPE h ...

随机推荐

  1. 蓝桥杯-核桃的数量-java

    /* (程序头部注释开始) * 程序的版权和版本声明部分 * Copyright (c) 2016, 广州科技贸易职业学院信息工程系学生 * All rights reserved. * 文件名称: ...

  2. poj2785双向搜索

    The SUM problem can be formulated as follows: given four lists A, B, C, D of integer values, compute ...

  3. 我眼中的微信小程序

    开始关注微信小程序是从去年8月份开始,当时它还没这么"火",而且当时我个人对其的发展也并不看好. 其一:是因为微信是第三方软件,把我的用户数据和信息挂载在微信上这样真的可靠吗?有朋 ...

  4. SSM框架搭建——我的第一个SSM项目

    转载自:http://blog.csdn.net/tmaskboy/article/details/51464791 作者使用MyEclipse 2014版本 本博客所编写程序源码为: http:// ...

  5. (知识点)JS获取网页高度

    网页可见区域的宽:document.body.clientWidth 网页可见区域的高:document.body.clientHeight 网页可见区域的宽:document.body.offset ...

  6. 思考题:用Use Case获取需求的方法是否有什么缺陷,还有什么地方需要改进?(提示:是否对所有的应用领域都适用?使用的方便性?.......)

    思考题: 用Use Case获取需求的方法是否有什么缺陷,还有什么地方需要改进?(提示:是否对所有的应用领域都适用?使用的方便性?.......) 简答: 一.用例解释: 在软件工程中,用例是一种在开 ...

  7. Mqtt服务器搭建

    .bg { background: #99CC99 } Mqtt服务器搭建 测试环境:CentOS64位 1.安装基础软件 yum install gcc-c++ yum install cmake ...

  8. smarty的学习计划(1)

    1.什么事smarty? 不知道,smarty是一个使用PHP写出来的模板引擎,它提供了逻辑外在内容的分离 2.smarty优点: a.速度:成熟的模板引擎技术 b.编译型:采用smarty编写的程序 ...

  9. 【JAVAWEB学习笔记】23_Listener和邮箱服务器

    监听器Listener 学习目标 案例-使用监听器完成定时生日祝福 一.监听器Listener javaEE包括13门规范 在课程中主要学习 servlet技术 和 jsp技术 其中 servlet规 ...

  10. LNMP1.3一键安装Linux环境,配置Nginx运行ThinkPHP3.2

    LNMP1.3一键安装Linux环境,配置Nginx运行ThinkPHP3.2 你是否遇见过:安装LNMP1.3环境后,运行ThinkPHP 3.2,只能打开首页,不能访问控制器,报404错误. 按照 ...