Angularjs自定义指令实现三级联动 选择地理位置


Posted in Javascript onFebruary 13, 2017

Angularjs自定义指令实现三级联动效果,先上图

Angularjs自定义指令实现三级联动 选择地理位置

Angularjs自定义指令实现三级联动 选择地理位置

Angularjs自定义指令实现三级联动 选择地理位置

代码

<html lang="zh-CN" ng-app="myApp">
 <head>
 <meta charset="utf-8">
 <meta http-equiv="X-UA-Compatible" content="IE=edge">
 <meta name="viewport" content="width=device-width, initial-scale=1">
 <script src="jquery.min.js"></script>
 <script src="angular.js"></script>
 <script src="bootstrap.min.js"></script>
 <link rel="stylesheet" href="bootstrap.min.css" rel="external nofollow" >
 <style type="text/css">
  select {
  width : 116px;
  }
  .selectLocation select {
  display: block;
  float: left;
  margin-bottom: 2px;
  }
 </style>
 <script type="text/javascript">
  var myApp = angular.module('myApp', []);
  myApp.controller('Ctrl', ['$scope', 'utilsService', function($scope, utilsService){
  $scope.location = '';
  $scope.$watch('location', function(newValue) {
   console.log(newValue)
   console.log(utilsService.isEmptyObj(newValue))
  })
  
  // if (isEmptyObj($scope.location)) {
  // //error
  // }
  }]);

  myApp.factory("utilsService", function() {
  return {
   isEmptyObj : function(obj) {
   var flag = true;
   for(var i in obj) {
    if (obj[i] != '') {
    flag = false;
    break;
    }
   }
   return flag;
   }
  }
  })

  myApp.directive("custLocation", ['$http', function($http) {
  return {
   restrict: 'A',
   scope: {
   ngModel : '='
   },
   templateUrl: 'tmpl.html',
   link: function(scope, elem, attrs) {
   scope.country = '';
   scope.province = '';
   scope.city = '';
   scope.detailAddress = '';

   $http.get("location.json").success(function(data) {
    scope.countryList = data.country;
   });

   scope.$watch('detailAddress', function(newValue) {
    // console.log(scope.country.name + scope.province.name + scope.city + newValue)
    scope.ngModel = {
    "country" : scope.country == null || scope.country == '' ? '' : scope.country.name,
    "province" : scope.province == null || scope.province == '' ? '' : scope.province.name,
    "city" : scope.city || '',
    "detailAddress" : newValue
    };
   });

   scope.changeCountry = function() {
    if (scope.country == null) {
    scope.country = '';
    scope.province = '';
    scope.city = '';
    scope.detailAddress = '';
    scope.ngModel = '';
    } else {
    scope.ngModel = {
     "country" : scope.country.name,
     "province" : scope.province == null || scope.province == '' ? '' : scope.province.name,
     "city" : scope.city || '',
     "detailAddress" : scope.detailAddress
    };
    }
   }

   scope.changeProvince = function () {
    scope.ngModel = {
    "country" : scope.country.name,
    "province" : scope.province == null || scope.province == '' ? '' : scope.province.name,
    "city" : scope.city || '',
    "detailAddress" : scope.detailAddress
    };
   }

   scope.changeCity = function() {
    scope.ngModel = {
    "country" : scope.country.name,
    "province" : scope.province == null || scope.province == '' ? '' : scope.province.name,
    "city" : scope.city || '',
    "detailAddress" : scope.detailAddress
    };
   }
   }
  };
  }]);
 </script>
 </head>
 <body ng-controller="Ctrl">
 <div cust-location ng-model="location"></div>
 </body>
</html>

tmpl.html

<div class="selectLocation">
 <div> 
 <select class="btn btn-info btn-sm" ng-change="changeCountry()" ng-model="country" ng-options="C.name for C in countryList">
  <option value="">国家</option>
 </select>
 </div> 
 <div> 
 <select class="btn btn-info btn-sm" ng-change="changeProvince()" ng-model="province" ng-options="p.name for p in country.province">
  <option value="">省份/直?市</option>
 </select>
 </div>
 <div> 
 <select class="btn btn-info btn-sm" ng-change="changeCity()" ng-model="city" ng-options="c for c in province.city">
  <option value="">市</option>
 </select> 
 </div>
 <div style="width:348px;">
 <input type="text" class="form-control" ng-model="detailAddress" placeholder="详细地址" ng-disabled="country=='' || country==null" />
 </div>
</div>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
会自动逐行上升的文本框
Jun 30 Javascript
判断滚动条到底部的JS代码
Nov 04 Javascript
ListBox实现上移,下移,左移,右移的简单实例
Feb 13 Javascript
jquery SweetAlert插件实现响应式提示框
Aug 18 Javascript
简述jQuery ajax的执行顺序
Jan 05 Javascript
使用jquery提交form表单并自定义action的方法
May 25 Javascript
jQuery的ajax下载blob文件
Jul 21 Javascript
详解webpack2+node+react+babel实现热加载(hmr)
Aug 24 Javascript
JS实现图片转换成base64的各种应用场景实例分析
Jun 22 Javascript
vue input实现点击按钮文字增删功能示例
Jan 29 Javascript
基于vue-cli3创建libs库的实现方法
Dec 04 Javascript
js之ajax文件上传
May 13 Javascript
基于jQuery代码实现圆形菜单展开收缩效果
Feb 13 #Javascript
JS中setTimeout和setInterval的最大延时值详解
Feb 13 #Javascript
Vue.js实现简单动态数据处理
Feb 13 #Javascript
JavaScript获取select中text值的方法
Feb 13 #Javascript
详谈$.data()的用法和作用
Feb 13 #Javascript
基于Angularjs+mybatis实现二级评论系统(仿简书)
Feb 13 #Javascript
JavaScript实现公历转农历功能示例
Feb 13 #Javascript
You might like
PHP魔术方法__GET、__SET使用实例
2014/11/25 PHP
jQuery 阴影插件代码分享
2012/01/09 Javascript
javascript 中String.match()与RegExp.exec()的区别说明
2013/01/10 Javascript
JSON序列化与解析原生JS方法且IE6和chrome测试通过
2013/09/05 Javascript
用js实现in_array的方法
2013/11/05 Javascript
jquery ajaxSubmit 异步提交的简单实现
2014/02/28 Javascript
Node.js与PHP、Python的字符处理性能对比
2014/07/06 Javascript
node.js中的fs.rmdirSync方法使用说明
2014/12/16 Javascript
jQuery中:password选择器用法实例
2015/01/03 Javascript
Javascript中的几种URL编码方法比较
2015/01/23 Javascript
JavaScript实现带标题的图片轮播特效
2015/05/20 Javascript
基于javascript实现tab切换特效
2016/03/29 Javascript
纯JS代码实现气泡效果
2016/05/04 Javascript
javascript基础语法——全面理解变量和标识符
2016/06/02 Javascript
JavaScript仿微信打飞机游戏
2020/07/05 Javascript
详解Vue用自定义指令完成一个下拉菜单(select组件)
2017/10/31 Javascript
详解vue-meta如何让你更优雅的管理头部标签
2018/01/18 Javascript
Vue底层实现原理总结
2018/02/17 Javascript
Angular 封装并发布组件的方法示例
2018/04/19 Javascript
vue项目部署上线遇到的问题及解决方法
2018/06/10 Javascript
JavaScript中 ES6变量的结构赋值
2018/07/10 Javascript
vuejs实现折叠面板展开收缩动画效果
2018/09/06 Javascript
详解如何理解vue的key属性
2019/04/14 Javascript
vue+element UI实现树形表格带复选框的示例代码
2019/04/16 Javascript
vue视频播放插件vue-video-player的具体使用方法
2019/11/08 Javascript
前端开发基础javaScript的六大作用
2020/08/06 Javascript
[37:47]IG vs Winstrike 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
Python正则表达式匹配HTML页面编码
2015/04/08 Python
Django框架组成结构、基本概念与文件功能分析
2019/07/30 Python
Python打开文件、文件读写操作、with方式、文件常用函数实例分析
2020/01/07 Python
Sunglasses Shop瑞典:欧洲领先的太阳镜网上商店
2018/04/22 全球购物
服装销售人员求职自我评价
2013/09/26 职场文书
财务总监岗位职责
2014/03/07 职场文书
2015年街道办事处工作总结
2015/05/22 职场文书
2015年小学美术工作总结
2015/05/25 职场文书
2016党员干部反腐倡廉心得体会
2016/01/13 职场文书