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 ...
随机推荐
- 我眼中的微信小程序
开始关注微信小程序是从去年8月份开始,当时它还没这么"火",而且当时我个人对其的发展也并不看好. 其一:是因为微信是第三方软件,把我的用户数据和信息挂载在微信上这样真的可靠吗?有朋 ...
- Transform java future into completable future 【将 future 转成 completable future】
Future is introduced in JDK 1.5 by Doug Lea to represent "the result of an asynchronous computa ...
- 观察者模式(Observer)发布、订阅模式
观察者模式定义了对象之间一对多的依赖关系,这样一来,当一个对象改变时,他的所有依赖者都会收到通知并自动更新. 模式中的角色 1.抽象主题(Subject):它把所有观察者对象的引用保存到一个聚集里 ...
- nodejs querystring踩坑笔记----只能用于表单提交
API中的实例: var http = require('http'); var querystring = require('querystring'); var postData = querys ...
- javascript 表达式和运算符 (二)
表达式是一种JS短语,可使JS解释器用来产生一个值. 一.表达式 表达式分类 1.原始表达式 常量.直接量 (3.14,"test"); 关键字 (null,this,true): ...
- 新年伊始,.net菜鸟入院的第一篇随笔
学习.net有半年了,大二一年都是微软校园的负责人,但是因为根本没有系统的学习过编程的知识,所以一直都是活动负责人的身份,忙忙碌碌也没有什么收获,大三一狠心就退了,想能够踏踏实实的敲敲代码,手上的学习 ...
- c#接口使用详解
c#接口使用详解 c#中接口隐式与显示实现 c#中接口可以隐式实现.显示实现,隐式实现更常使用.显示实现较少使用 其区别在于 显示实现避免接口函数签名冲突 显示实现只可以以接口形式调用 显示实现其子类 ...
- 浅谈RSA加密
RSA背景 在1976年以前,传统的加解密过程是: 1.A采用某种手段对数据进行加密. 2.数据传输到B的手中. 3.B逆向的实施A加密采用的步骤. 4.数据被还原. 这就是所谓的对称加密. 解密和加 ...
- @Autowired标签与 @Resource标签 的区别
Spring不但支持自己定义的@Autowired注解,还支持由JSR-250规范定义的几个注解,如:@Resource. @PostConstruct及@PreDestroy. 1. @Autowi ...
- HttpGet和HttpPost
package net.blogjava.mobile; import java.net.HttpURLConnection; import java.util.ArrayList; import j ...