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 ...
随机推荐
- 蓝桥杯-土地测量-java
/* (程序头部注释开始) * 程序的版权和版本声明部分 * Copyright (c) 2016, 广州科技贸易职业学院信息工程系学生 * All rights reserved. * 文件名称: ...
- 《分布式Java应用之基础与实践》读书笔记四
Java代码作为一门跨操作系统的语言,最终是运行在JVM中的,所以对于JVM的理解就变得非常重要了.整体上,我们可以从三个方面来深入理解JVM. Java代码的执行 内存管理 线程资源同步和交互机制 ...
- Java并发包分析——BlockingQueue
之前因为找实习的缘故,博客1个多月没有写了.找实习的经历总算告一段落,现在重新更新博客,这次的内容是分析Java并发包中的阻塞队列 关于阻塞队列,我之前是一直充满好奇,很好奇这个阻塞是怎么实现.现在我 ...
- python之基础中的基础(一)
python是一个效率极高的语言,现在市面上的机器学习大部分是由python和R语言完成,所以在不久之前小仙心中便种下了学习python的想法.下面是这一个月多月以来学习的总结,都是基础中基础了. 1 ...
- 使用java API操作hdfs--拷贝部分文件到本地
要求:和前一篇的要求正好相反.. 在HDFS中生成一个130KB的文件: 代码如下: import java.io.IOException; import org.apache.hadoop.conf ...
- 文件查找---find
文件查找(find) 1 find 简单的说,就是实时查找指定的内容或条件.特点:最新.最快.最准确. 用法:find [查找路径] [查找条件] [找到后进行的动作] eg. find /e ...
- ShadowBroker释放的NSA工具中Esteemaudit漏洞复现过程
没有时间测试呢,朋友们都成功复现,放上网盘地址:https://github.com/x0rz/EQGRP 近日臭名昭著的方程式组织工具包再次被公开,TheShadowBrokers在steemit. ...
- kotlin 语言入门指南一
基于官网的Getting Start部分,翻译如下: 基础语法 定义一个包 包的声明必须放在文件头部: package my.demo import java.util.* // ... 不需要加上p ...
- 开涛spring3(5.1&5.2) - Spring表达式语言 之 5.1 概述 5.2 SpEL基础
5.1 概述 5.1.1 概述 Spring表达式语言全称为“Spring Expression Language”,缩写为“SpEL”,类似于Struts2x中使用的OGNL表达式语言,能在运行 ...
- 开涛spring3(4.3) - 资源 之 4.3 访问Resource
4.3.1 ResourceLoader接口 ResourceLoader接口用于返回Resource对象:其实现可以看作是一个生产Resource的工厂类. public interface Re ...