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 相关文章推荐
javascript add event remove event
Apr 07 Javascript
Bootstrap每天必学之标签与徽章
Nov 27 Javascript
JavaScript统计字符串中每个字符出现次数完整实例
Jan 28 Javascript
javascript小数精度丢失的完美解决方法
May 31 Javascript
JS实现获取剪贴板内容的方法
Jun 21 Javascript
JS中append字符串包含onclick无效传递参数失败的解决方案
Dec 26 Javascript
微信小程序访问node.js接口服务器搭建教程
Apr 25 Javascript
vue router 跳转后回到顶部的实例
Aug 31 Javascript
详解vue-cli3多页应用改造
Jun 04 Javascript
简单了解JavaScript中常见的反模式
Jun 21 Javascript
微信小程序 可搜索的地址选择实现详解
Aug 28 Javascript
谈谈JavaScript中的垃圾回收机制
Sep 17 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中$美元符号与Zen Coding冲突问题解决方法分享
2014/05/28 PHP
php实现微信公众平台账号自定义菜单类
2015/10/11 PHP
PHP中如何防止外部恶意提交调用ajax接口
2016/04/11 PHP
关于php中的json_encode()和json_decode()函数的一些说明
2016/11/20 PHP
在Mac OS下搭建LNMP开发环境的步骤详解
2017/03/10 PHP
php实现的pdo公共类定义与用法示例
2017/07/19 PHP
HTML-CSS群中单选引发的“事件”
2007/03/05 Javascript
JS支持带x身份证号码验证函数
2008/08/10 Javascript
Nodejs实现的一个简单udp广播服务器、客户端
2014/09/25 NodeJs
基于javascript实现精确到毫秒的倒计时限时抢购
2016/04/17 Javascript
js实现3d悬浮效果
2017/02/16 Javascript
Angular2中如何使用ngx-translate进行国际化
2017/05/21 Javascript
面包屑导航详解
2017/12/07 Javascript
vue柱状进度条图像的完美实现方案
2019/08/26 Javascript
jquery实现直播弹幕效果
2019/11/28 jQuery
React学习之受控组件与数据共享实例分析
2020/01/06 Javascript
浅析Vue 中的 render 函数
2020/02/28 Javascript
如何基于layui的laytpl实现数据绑定的示例代码
2020/04/10 Javascript
详解ES6新增字符串扩张方法includes()、startsWith()、endsWith()
2020/05/12 Javascript
[02:49]2018DOTA2亚洲邀请赛主赛事决赛日战况回顾 Mineski鏖战5局夺得辉耀
2018/04/10 DOTA
[58:32]EG vs Liquid 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
python实现简单的socket server实例
2015/04/29 Python
利用python程序帮大家清理windows垃圾
2017/01/15 Python
python如何定义带参数的装饰器
2018/03/20 Python
numpy.delete删除一列或多列的方法
2018/04/03 Python
在python中利用opencv简单做图片比对的方法
2019/01/24 Python
django之导入并执行自定义的函数模块图解
2020/04/01 Python
python 抓取知乎指定回答下视频的方法
2020/07/09 Python
CSS3 Flex 弹性布局实例代码详解
2018/11/01 HTML / CSS
Staples加拿大官方网站:办公用品一站式采购
2016/09/25 全球购物
医药营销个人求职信
2014/04/12 职场文书
优秀教导主任事迹材料
2014/05/09 职场文书
镇人大副主席民主生活会对照检查材料思想汇报
2014/10/01 职场文书
《称赞》教学反思
2016/02/17 职场文书
CSS三大特性继承性、层叠性和优先级详解
2022/01/18 HTML / CSS
电脑关机速度很慢怎么办 提升电脑关机速度设置教程
2022/04/08 数码科技