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 相关文章推荐
FF IE兼容性的修改小结
Sep 02 Javascript
JavaScript的public、private和privileged模式
Dec 28 Javascript
Javascript 异步加载详解(浏览器在javascript的加载方式)
May 20 Javascript
js实现简单计算器
Nov 22 Javascript
js实现网页收藏功能
Dec 17 Javascript
微信小程序 解决请求服务器手机预览请求不到数据的方法
Jan 04 Javascript
JQuery判断正整数整理小结
Aug 21 jQuery
Vue 项目部署到服务器的问题解决方法
Dec 05 Javascript
解决vue的变量在settimeout内部效果失效的问题
Aug 30 Javascript
更改BootStrap popover的默认样式及popover简单用法
Sep 13 Javascript
vue中使用cookies和crypto-js实现记住密码和加密的方法
Oct 18 Javascript
laydate只显示时分 不显示秒的功能实现方法
Sep 28 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
C/S和B/S两种架构区别与优缺点分析
2014/10/23 PHP
46 个非常有用的 PHP 代码片段
2016/02/16 PHP
ThinkPHP实现更新数据实例详解(demo)
2016/06/29 PHP
document.execCommand()的用法小结
2014/01/08 Javascript
node.js WEB开发中图片验证码的实现方法
2014/06/03 Javascript
JavaScript中getUTCMinutes()方法的使用详解
2015/06/10 Javascript
jQuery插件datalist实现很好看的input下拉列表
2015/07/14 Javascript
JavaScript计算某一天是星期几的方法
2015/08/05 Javascript
javascript+HTML5 Canvas绘制转盘抽奖
2020/05/16 Javascript
JS Ajax请求如何防止重复提交
2016/06/13 Javascript
JS实现旋转木马式图片轮播效果
2017/01/18 Javascript
JavaScript mixin实现多继承的方法详解
2017/03/30 Javascript
vue实现行列转换的一种方法
2019/08/06 Javascript
SpringBoot+Vue开发之Login校验规则、实现登录和重置事件
2020/10/19 Javascript
解决pyqt中ui编译成窗体.py中文乱码的问题
2016/12/23 Python
python中利用await关键字如何等待Future对象完成详解
2017/09/07 Python
python+pyqt实现右下角弹出框
2017/10/26 Python
python中将一个全部为int的list 转化为str的list方法
2018/04/09 Python
Python多线程原理与用法实例剖析
2019/01/22 Python
Anaconda 查看、创建、管理和使用python环境的方法
2019/12/03 Python
python已协程方式处理任务实现过程
2019/12/27 Python
python GUI库图形界面开发之PyQt5信号与槽事件处理机制详细介绍与实例解析
2020/03/08 Python
Python爬虫谷歌Chrome F12抓包过程原理解析
2020/06/04 Python
opencv 查找连通区域 最大面积实例
2020/06/04 Python
Python3爬虫中Selenium的用法详解
2020/07/10 Python
Python中random模块常用方法的使用教程
2020/10/04 Python
CSS3媒体查询(Media Queries)介绍
2013/09/12 HTML / CSS
美国知名奢侈美容品牌零售商:Cos Bar
2017/04/21 全球购物
有机童装:Toby Tiger
2018/05/23 全球购物
英国最受欢迎的价格比较网站之一:MoneySuperMarket
2018/12/19 全球购物
股份转让协议书
2014/04/12 职场文书
绿色家庭事迹材料
2014/05/01 职场文书
中学优秀班主任事迹材料
2014/05/01 职场文书
2016个人廉洁自律承诺书
2016/03/25 职场文书
CSS3 制作的悬停缩放特效
2021/04/13 HTML / CSS
css3实现背景图片半透明内容不透明的方法示例
2021/04/13 HTML / CSS