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 相关文章推荐
仿服务器端脚本方式的JS模板实现方法
Apr 27 Javascript
使用jQuery设置disabled属性与移除disabled属性
Aug 21 Javascript
JavaScript暂停和继续定时器的实现方法
Jul 18 Javascript
Vue.js表单控件实践
Oct 27 Javascript
json的结构与遍历方法实例分析
Apr 25 Javascript
vue.draggable实现表格拖拽排序效果
Dec 01 Javascript
详解django模板与vue.js冲突问题
Jul 07 Javascript
详解vue为什么要求组件模板只能有一个根元素
Jul 22 Javascript
Node.js API详解之 dgram模块用法实例分析
Jun 05 Javascript
vue 通过 Prop 向子组件传递数据的实现方法
Oct 30 Javascript
nuxt静态部署打包相对路径操作
Nov 06 Javascript
解决Vue watch里调用方法的坑
Nov 07 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 IN_ARRAY 函数使用注意事项
2010/07/24 PHP
PHP实现中国公民身份证号码有效性验证示例代码
2017/05/03 PHP
PHP实现数组和对象的相互转换操作示例
2019/03/20 PHP
javascript 获取网页参数系统
2008/07/19 Javascript
JavaScript 事件属性绑定带参数的函数
2009/03/13 Javascript
jquery ready函数、css函数及text()使用示例
2013/09/27 Javascript
JS简单实现元素复制示例附图
2013/11/19 Javascript
jquery使用$(element).is()来判断获取的tagName
2014/08/24 Javascript
js实现图片从左往右渐变切换效果的方法
2015/02/06 Javascript
JS截取与分割字符串常用技巧总结
2015/11/10 Javascript
JavaScript实现跑马灯抽奖活动实例代码解析与优化(二)
2016/02/16 Javascript
js中动态创建json,动态为json添加属性、属性值的实例
2016/12/02 Javascript
javascript实现倒计时效果
2020/02/17 Javascript
ES5新增数组的实现方法
2020/05/12 Javascript
使用TS来编写express服务器的方法步骤
2020/10/29 Javascript
JS画布动态实现黑客帝国背景效果
2020/11/08 Javascript
Python CSV模块使用实例
2015/04/09 Python
Python中使用支持向量机SVM实践
2017/12/27 Python
详解Python with/as使用说明
2018/12/13 Python
python实现BP神经网络回归预测模型
2019/08/09 Python
Python 利用高德地图api实现经纬度与地址的批量转换
2019/08/14 Python
在django中实现页面倒数几秒后自动跳转的例子
2019/08/16 Python
PyCharm使用Docker镜像搭建Python开发环境
2019/12/26 Python
python定义类self用法实例解析
2020/01/22 Python
python使用matplotlib的savefig保存时图片保存不完整的问题
2021/01/08 Python
css3的动画特效之动画序列(animation)
2017/12/22 HTML / CSS
Html5游戏开发之乒乓Ping Pong游戏示例(一)
2013/01/21 HTML / CSS
使用HTML5做个画图板的方法介绍
2013/05/03 HTML / CSS
英国香水店:The Perfume Shop
2017/03/27 全球购物
英国广泛的照明产品网站:Lights4living
2018/01/28 全球购物
员工拓展培训方案
2014/02/15 职场文书
志愿者服务感言
2014/02/27 职场文书
公证书标准格式
2014/04/10 职场文书
社会治安综合治理管理责任书
2014/04/16 职场文书
Vue操作Storage本地化存储
2022/04/29 Vue.js
js面向对象编程OOP及函数式编程FP区别
2022/07/07 Javascript