不多说,直接上代码,一开始搞了好久,最后才弄懂,希望对大家有帮助

1.jade

div.col-md-2
select.form-control(ng-options="value.code as value.name for value in provincial" ng-model="info.provincial" required='' ng-change="getArea('city',info.provincial)")
option(value='') 选择省
div.col-md-2
select.form-control(ng-options="value.code as value.name for value in city" ng-model="info.city" required='' ng-change="getArea('district',info.city)")
option(value='') 选择市
div.col-md-2
select.form-control(ng-options="value.code as value.name for value in district" ng-model="info.district" required='' ng-change="areaText()")
option(value='') 选择区

js

  

  传的值

  后台返回的数据 省

  

  

  传的值

  后台返回的数据 市

  

angular.module('app').directive('provinceSelect', ['$rootScope', 'api', function($rootScope, api) {
// Runs during compile
'use strict';
return {
// name: '',
// priority: 1,
// terminal: true,
scope: {
info: '=info',
area: '=area'
}, // {} = isolate, true = child, false/undefined = no change
controller: function($scope, $element, $attrs, $transclude) {
function getArea(id, returnFn) {
api("areaList", { //后台给的省市区接口
data: {
parentId: id
}
}).then(function(data) {
returnFn(data);
});
}
$scope.getArea = function(name, id) {
if (name === 'city' && id === undefined) {
$scope.city = [];
$scope.district = [];
return;
} else if (name === 'district' && id === undefined) {
$scope.district = [];
return;
}
getArea(id || 0, function(data) {
$scope[name] = data;
});
};
$scope.getArea('provincial', 0);
$scope.$watch('info', function(newVal, oldVal) {
if (newVal) {
$scope.getArea('city', newVal.provincial);
$scope.getArea('district', newVal.city); }
});
// provincialWatch();
// if ($scope.info.provincial) {
// $scope.getArea('city', $scope.provincial);
// }
// if ($scope.info.district) {
// $scope.getArea('district', $scope.city);
// }
$scope.areaText = function() {
var area = $element.find("select");
var areas = '';
for (var i = 0; i < area.length; i++) {
var index = area[i].selectedIndex;
if (index === 0) {continue;}
areas += area[i].options[index].text;
}
$scope.area = areas;
};
},
// require: 'ngModel', // Array = multiple requires, ? = optional, ^ = check parent elements
// restrict: 'A', // E = Element, A = Attribute, C = Class, M = Comment
// template: '',
templateUrl: 'app/dist/directive/provinceSelect/provinceSelect.html',
// replace: true,
transclude: true,
// compile: function(tElement, tAttrs, function transclude(function(scope, cloneLinkingFn){ return function linking(scope, elm, attrs){}})),
link: function($scope, iElm, iAttrs, controller) {
//console.log($scope)
}
};
}]);

angular.js实现省市区三级联动指令的更多相关文章

  1. 【原生js】原生js的省市区三级联动

    html: <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" c ...

  2. js实现省市区三级联动

    电商平台或者一些网站的个人信息部分,通常会有填写地址的功能.该功能一般分为二级联动(省.市)和三级联动(省.市.区),只需要JavaScript就可以实现. 这里介绍一种很简洁易用的方法.参考地址:h ...

  3. JS(JQuery) 省市区三级联动下拉选择

    引入 area.js /* * 全国三级城市联动 js版 */ function Dsy(){ this.Items = {}; } Dsy.prototype.add = function(id,i ...

  4. JS实现年月日三级联动+省市区三级联动+国家省市三级联动

    开篇随笔:最近项目需要用到关于年月日三级联动以及省市区三级联动下拉选择的功能,于是乎网上搜了一些做法,觉得有一些只是给出了小的案例或者只有单纯的js还不完整,却很难找到详细的具体数据(baidu搜索都 ...

  5. vue 引用省市区三级联动(插件)

    vue 用省市区三级联动之傻瓜式教程(复制粘贴即用) npm 下载 npm install v-distpicker --save main.js //引入 省市区三级联动 import Distpi ...

  6. JS省市区三级联动

    不需要访问后台服务器端,不使用Ajax,无刷新,纯JS实现的省市区三级联动. 当省市区数据变动是只需调正js即可. 使用方法: <!DOCTYPE html><html>< ...

  7. QQ JS省市区三级联动

    如下图: 首先写一个静态的页面: <!DOCTYPE html> <html> <head> <title>QQ JS省市区三级联动</title ...

  8. 从QQ网站中提取的纯JS省市区三级联动

    在 http://ip.qq.com/ 的网站中有QQ自己的JS省市区三级联动 QQ是使用引用外部JS来实现三级联动的.JS如下:http://ip.qq.com/js/geo.js <!DOC ...

  9. 插件 原生js 省市区 三级联动 源码

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

随机推荐

  1. centos 6.5 搭建ftp服务器

    linux下一般使用vsftpd作为ftp服务器. vsftpd是一款在Linux发行版中最受推崇的FTP服务器程序.特点是小巧轻快,安全易用. 下面是安装配置步骤: 1.安装vsftpd yum i ...

  2. ubuntu用不了root用户:~$ su - root Password: su: Authentication failure怎么办?

    解除root锁定,为root用户设置密码. 打开终端输入:sudo passwd Password: <--- 输入你当前用户的密码 Enter new UNIX password: <- ...

  3. js遍历(获取)ul中的li

    <!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8&qu ...

  4. DC平衡双向控制解串器 转接IC GM8914:FPD-LINK III转LVTTL芯片

    1 概述 GM8914型DC平衡双向控制解串器,其主要功能是实现将2.8Gbps高速串行数据转换成10或12位并行控制信号,并同步输出一路时钟信号:同时低速通道将芯片控制信息调制到高速差分信号上传输给 ...

  5. android 开机自启动实现

    App的开机自启动可以通过注册广播接收器接收开机广播来实现,具体步骤如下: 1.创建 BroadcastReceiver 的派生类,并重写 onReceive() 函数: /** * Created ...

  6. (一)一起学 Java Collections Framework 源码之 概述

    . . . . . 目录 (一)一起学 Java Collections Framework 源码之 概述 JDK 中很多类 LZ 已经使用了无数次,但认认真真从源码级研究过其原理的还只占少数,虽然从 ...

  7. vb中创建xml

    这里是原生的做法,具体使用可做相应的封装:     Private Function GetUpdateRoomXml() As String         Dim xmlDOM As New Xm ...

  8. angular 自定义filter

    用modul.filter .filter("fiilterCity",function(){ return function(obj){ var newObj = []; ang ...

  9. 浅谈C#数组(二)

    六.枚举集合 在foreach语句中使用枚举,可以迭代集合中的元素,且无需知道集合中元素的个数.foreach语句使用一个枚举器.foreach会调用实现了IEnumerable接口的集合类中的Get ...

  10. HYML / CSS和Javascript 部分

    1  CSS实现垂直水平居中 HTML结构: <div class="wrapper"> <div class="content">&l ...