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="">省份/直 主站蜘蛛池模板: 龙南县| 西畴县| 威信县| 祥云县| 建昌县| 甘泉县| 新兴县| 浮梁县| 尉犁县| 菏泽市| 宝鸡市| 临澧县| 正蓝旗| 青岛市| 柞水县| 柳江县| 长葛市| 昆山市| 阜宁县| 股票| 平塘县| 诸暨市| 含山县| 罗甸县| 南昌县| 荆州市| 永宁县| 临江市| 陕西省| 岗巴县| 赤峰市| 长汀县| 嘉兴市| 本溪市| 太谷县| 壤塘县| 农安县| 盐山县| 广饶县| 南丹县| 长海县|