ionic+AnjularJs实现省市县三级联动效果
建议对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实现省市县三级联动效果的更多相关文章
- jQuery - 全国省市县三级联动
最近有空用jquery做了一个全国省市县的三级联动,在以后或许可以用的到 ,遗憾的是我还没用封装,等有空看能不能封装成一个插件 废话不多说,贴上代码: <!doctype html> &l ...
- wex5 实战 省市县三级联动与地址薄同步
无论是商城,还是快递,都要用到省市县三级联动,和地址薄,今天就以实战来制作,难点有3个: 1:三级联动,有wex5组件实现,相对简单,实战里对行数据进行了拼接 2: 地址薄选项,利用inputSel ...
- php仿经典省市县三级联动
之前有个需求要写个类似省市县三级联动的页面,于是,网上找了点资料看了下,其实原理很简单: 当我们选择一级栏目中某条记录的时候,会获取该栏目的vaule值,并发起ajax请求,后台根据这个vaule值, ...
- 项目总结01:JSP mysql SpringMvc下中国省市县三级联动下拉框
JSP mysql SpringMvc下中国省市县三级联动下拉框 关键词 JSP mysql数据库 SpringMvc ajax Controller层 Service层 中国地区 省 ...
- 省市县三级联动 sql语句
发现在网上的省市县三级联动大部分是mysql的.就算是sqlserver的,也不准确.于是就把mysql的给改了下,适用sqlserver.sql语句如下: CREATE TABLE Dic_Area ...
- Android 省市县 三级联动(android-wheel的使用)[转]
转载:http://blog.csdn.net/lmj623565791/article/details/23382805 今天没事跟群里面侃大山,有个哥们说道Android Wheel这个控件,以为 ...
- Android 省市县 三级联动(android-wheel的使用)
转载请注明出处:http://blog.csdn.net/lmj623565791/article/details/23382805 今天没事跟群里面侃大山,有个哥们说道Android Wheel这个 ...
- PyQt5--基础篇:用eric6工具实现三级联动效果
今天给大家介绍下python gui界面的三级联动效果,我们用工具eric6来实现,先看下效果图. 首先我们先创建项目linkage,再新建窗体进入到Qt设计师工具开始设计界面,完成后保存并退出. 在 ...
- js之省市区(县)三级联动效果
省市区(县)三级联动效果,是我们软件开发比较常用的,特别是对一些crm,erp之类,当然也包括其他的后台管理系统,基本都涉及到,今天贴出这个常用的,方便个人复用和大家使用 <!DOCTYPE h ...
随机推荐
- 清北Day4
版权声明:如需转载请标明出处,未得到本人许可请勿转载. 今天就可以看到传说中的 数据结构 嘿嘿嘿嘿 都有什么呢 链表 队列 栈 st表 hash 线段树 树链剖分 一.栈: 放出来这个看烂了的图 值得 ...
- 【lucene系列学习】排序
用lucene3实现搜索多字段并排序功能(设置权重)
- 蓝桥杯-搭积木-java
/* (程序头部注释开始) * 程序的版权和版本声明部分 * Copyright (c) 2016, 广州科技贸易职业学院信息工程系学生 * All rights reserved. * 文件名称: ...
- 优化单页面开发环境:webpack与react的运行时打包与热更新
前面两篇文章介绍初步搭建单页面应用的开发环境: 第一篇:使用webpack.babel.react.antdesign配置单页面应用开发环境 第二篇:使用react-router实现单页面应用路由 这 ...
- Java static 关键字详解
引言 在<Java编程思想>中有这样一段话:static方法就是没有this的方法.在static方法内部不能调用非静态方法,反过来是可以的.而且可以在没有创建任何对象的前提下,仅仅通过类 ...
- fgets()函数以及fputs()函数
fgets() fgets() 该函数是一个文件操作相关的函数 暂时使用这个函数可以从键盘接收一个字符串,保存到字符数组中 原来接收字符串保存到数组中的方法: char str[50]; 1) sca ...
- python3 time模块与datetime模块
time模块 在Python中,通常有这几种方式来表示时间:1)时间戳 2)格式化的时间字符串 3)元组(struct_time)共九个元素.由于Python的time模块实现主要调用C库,所以各个平 ...
- JAVA并发编程实战---第三章:对象的共享
在没有同步的情况下,编译器.处理器以及运行时等都可能对操作的执行顺序进行一些意想不到的调整.在缺乏足够同步的多线程程序中,要对内存操作的执行顺序进行判断几乎无法得到正确的结果. 非原子的64位操作 当 ...
- springMvc注解之@ResponseBody和@RequestBody
简介 springmvc对json的前后台传输做了很好封装,避免了重复编码的过程,下面来看看常用的@ResponseBody和@RequestBody注解 添加依赖 springmvc对json的处理 ...
- 取代netcat
前言 众所周知,netcat是网络界的瑞士军刀,它的主要作用是:提供连接其他终端的方法,可以上传文件,反弹shell等等各种利于别人控制你电脑的操作.所以聪明的系统管理员会将它从系统中移除,这样当别人 ...