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

发布时间 - 2026-01-10 23:01:02    点击率:

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>

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


# Angularjs  # 三级联动  # AngularJS实现的select二级联动下拉菜单功能示例  # Angularjs实现下拉框联动的示例代码  # 基于AngularJs + Bootstrap + AngularStrap相结合实现省市区联动代码  # 实例详解AngularJS实现无限级联动菜单  # 基于angular实现三级联动的生日插件  # AngularJS实现的省市二级联动功能示例【可对选项实现增删】  # 自定义  # 大家多多  # 上图  # js  # min  # jquery  # angular  # rel  # link  # bootstrap  # device  # width  # viewport  # initial  # src  # script  # scale  # stylesheet  # display  # selectLocation 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: jQuery 常见小例汇总  成都品牌网站制作公司,成都营业执照年报网上怎么办理?  韩国服务器如何优化跨境访问实现高效连接?  php打包exe后无法访问网络共享_共享权限设置方法【教程】  如何在IIS中配置站点IP、端口及主机头?  Laravel如何记录日志_Laravel Logging系统配置与自定义日志通道  php在windows下怎么调试_phpwindows环境调试操作说明【操作】  佛山企业网站制作公司有哪些,沟通100网上服务官网?  Laravel如何处理异常和错误?(Handler示例)  如何在服务器上配置二级域名建站?  Laravel怎么返回JSON格式数据_Laravel API资源Response响应格式化【技巧】  如何在阿里云虚拟机上搭建网站?步骤解析与避坑指南  如何在阿里云购买域名并搭建网站?  Laravel模型事件有哪些_Laravel Model Event生命周期详解  HTML透明颜色代码怎么让下拉菜单透明_下拉菜单透明背景指南【技巧】  Laravel如何安装使用Debugbar工具栏_Laravel性能调试与SQL监控插件【步骤】  Laravel如何优雅地处理服务层_在Laravel中使用Service层和Repository层  东莞市网站制作公司有哪些,东莞找工作用什么网站好?  Laravel Eloquent性能优化技巧_Laravel N+1查询问题解决  Laravel如何处理和验证JSON类型的数据库字段  太平洋网站制作公司,网络用语太平洋是什么意思?  javascript基本数据类型及类型检测常用方法小结  iOS UIView常见属性方法小结  作用域操作符会触发自动加载吗_php类自动加载机制与::调用【教程】  如何快速搭建FTP站点实现文件共享?  Laravel如何使用Seeder填充数据_Laravel模型工厂Factory批量生成测试数据【方法】  如何快速搭建高效香港服务器网站?  Laravel如何使用Service Provider服务提供者_Laravel依赖注入与容器绑定【深度】  Linux网络带宽限制_tc配置实践解析【教程】  Laravel路由Route怎么设置_Laravel基础路由定义与参数传递规则【详解】  用yum安装MySQLdb模块的步骤方法  如何在云虚拟主机上快速搭建个人网站?  如何使用 Go 正则表达式精准提取括号内首个纯字母标识符(忽略数字与嵌套)  制作无缝贴图网站有哪些,3dmax无缝贴图怎么调?  如何在VPS电脑上快速搭建网站?  Laravel怎么实现搜索功能_Laravel使用Eloquent实现模糊查询与多条件搜索【实例】  PHP正则匹配日期和时间(时间戳转换)的实例代码  ai格式如何转html_将AI设计稿转换为HTML页面流程【页面】  如何在Windows服务器上快速搭建网站?  微博html5版本怎么弄发超话_超话进入入口及发帖格式要求【教程】  佐糖AI抠图怎样调整抠图精度_佐糖AI精度调整与放大细化操作【攻略】  Android自定义控件实现温度旋转按钮效果  谷歌浏览器下载文件时中断怎么办 Google Chrome下载管理修复  Laravel怎么使用Collection集合方法_Laravel数组操作高级函数pluck与map【手册】  Laravel怎么进行数据库回滚_Laravel Migration数据库版本控制与回滚操作  公司网站制作需要多少钱,找人做公司网站需要多少钱?  Laravel如何配置Horizon来管理队列?(安装和使用)  Laravel怎么使用Intervention Image库处理图片上传和缩放  打造顶配客厅影院,这份100寸电视推荐名单请查收  关于BootStrap modal 在IOS9中不能弹出的解决方法(IOS 9 bootstrap modal ios 9 noticework)