我有州和国家/地区的国家/地区列表。此代码正在使用级联下拉列表。如何根据用户输入进行下拉列表
期望: 当我点击国家下拉列表时,如果用户输入基于输入的国家/地区列表(如搜索),则会出现一个带有列表的文本框。
我在
下添加了我的代码angular.module('test', [])
.controller('TestController', ['$scope', '$filter',
function ($scope, $filter) {
$scope.country = "India";
$scope.state = "Rajasthan";
$scope.city = "Ajmer";
$scope.countries = [{
"name": "India",
"states": [{
"name": "Maharashtra",
"cities": [{
"name": "Pune"
}, {
"name": "Mumbai"
}, {
"name": "Nagpur"
}, {
"name": "Akola"
}]
}, {
"name": "Madhya Pradesh",
"cities": [{
"name": "Indore"
}, {
"name": "Bhopal"
}, {
"name": "Jabalpur"
}]
}, {
"name": "Rajasthan",
"cities": [{
"name": "Jaipur"
}, {
"name": "Ajmer"
}, {
"name": "Jodhpur"
}]
}]
}, {
"name": "USA",
"states": [{
"name": "Alabama",
"cities": [{
"name": "Montgomery"
}, {
"name": "Birmingham"
}]
}, {
"name": "California",
"cities": [{
"name": "Sacramento"
}, {
"name": "Fremont"
}]
}, {
"name": "Illinois",
"cities": [{
"name": "Springfield"
}, {
"name": "Chicago"
}]
}]
}, {
"name": "Australia",
"states": [{
"name": "NewSouthWales",
"cities": [{
"name": "Sydney"
}]
}, {
"name": "Victoria",
"cities": [{
"name": "Melbourne"
}]
}]
}];
$scope.getStates = function () {
$scope.states = null;
$scope.cities = null;
console.log($scope.country);
if ($scope.country != null) {
var filteredCountry = $filter("filter")($scope.countries, $scope.country);
if (filteredCountry != null && filteredCountry.length == 1) {
$scope.states = filteredCountry[0].states;
}
}
};
$scope.getCity = function () {
$scope.cities = null;
if ($scope.state != null) {
var filteredState = $filter("filter")($scope.states, $scope.state);
if (filteredState != null && filteredState.length == 1) {
$scope.cities = filteredState[0].cities;
}
}
};
if ($scope.country != null) {
var filteredCountry = $filter("filter")($scope.countries, $scope.country);
if (filteredCountry != null && filteredCountry.length == 1) {
$scope.states = filteredCountry[0].states;
var filteredState = $filter("filter")($scope.states, $scope.state);
if (filteredState != null && filteredState.length == 1) {
$scope.cities = filteredState[0].cities;
}
}
}
$scope.alertCity = function () {
alert('You selected ' + $scope.city);
};
//console.log($scope.countries);
}]);
HTML
<div ng-app="test">
<div ng-controller="TestController">
<div>Country:
<select ng-model="country" ng-options="country.name as country.name for country in countries" ng-change="getStates()">
<option value=''>Select</option>
</select>
</div>
<div>States:
<select id="state" ng-disabled="!country" ng-model="state" ng-options="state.name as state.name for state in states" ng-change="getCity()">
<option value=''>Select</option>
</select>
</div>
<div>City:
<select id="city" ng-disabled="!country || !state" ng-model="city" ng-options="city.name as city.name for city in cities" ng-change="alertCity()">
<option value=''>Select</option>
</select>
</div>
</div>
</div>
mydemo 我想为每个下拉列表引入一个过滤器。
答案 0 :(得分:0)
您实际上可以使用Select2执行相同的操作。由于您已经使用AngularJS填充了数据,所以已经完成了。所以请查看以下代码段:
angular.module('test', [])
.controller('TestController', ['$scope', '$filter',
function ($scope, $filter) {
$scope.country = "India";
$scope.state = "Rajasthan";
$scope.city = "Ajmer";
$scope.countries = [{
"name": "India",
"states": [{
"name": "Maharashtra",
"cities": [{
"name": "Pune"
}, {
"name": "Mumbai"
}, {
"name": "Nagpur"
}, {
"name": "Akola"
}]
}, {
"name": "Madhya Pradesh",
"cities": [{
"name": "Indore"
}, {
"name": "Bhopal"
}, {
"name": "Jabalpur"
}]
}, {
"name": "Rajasthan",
"cities": [{
"name": "Jaipur"
}, {
"name": "Ajmer"
}, {
"name": "Jodhpur"
}]
}]
}, {
"name": "USA",
"states": [{
"name": "Alabama",
"cities": [{
"name": "Montgomery"
}, {
"name": "Birmingham"
}]
}, {
"name": "California",
"cities": [{
"name": "Sacramento"
}, {
"name": "Fremont"
}]
}, {
"name": "Illinois",
"cities": [{
"name": "Springfield"
}, {
"name": "Chicago"
}]
}]
}, {
"name": "Australia",
"states": [{
"name": "NewSouthWales",
"cities": [{
"name": "Sydney"
}]
}, {
"name": "Victoria",
"cities": [{
"name": "Melbourne"
}]
}]
}];
$scope.getStates = function () {
$scope.states = null;
$scope.cities = null;
console.log($scope.country);
if ($scope.country != null) {
var filteredCountry = $filter("filter")($scope.countries, $scope.country);
if (filteredCountry != null && filteredCountry.length == 1) {
$scope.states = filteredCountry[0].states;
}
}
};
$scope.getCity = function () {
$scope.cities = null;
if ($scope.state != null) {
var filteredState = $filter("filter")($scope.states, $scope.state);
if (filteredState != null && filteredState.length == 1) {
$scope.cities = filteredState[0].cities;
}
}
};
if ($scope.country != null) {
var filteredCountry = $filter("filter")($scope.countries, $scope.country);
if (filteredCountry != null && filteredCountry.length == 1) {
$scope.states = filteredCountry[0].states;
var filteredState = $filter("filter")($scope.states, $scope.state);
if (filteredState != null && filteredState.length == 1) {
$scope.cities = filteredState[0].cities;
}
}
}
$scope.alertCity = function () {
alert('You selected ' + $scope.city);
};
//console.log($scope.countries);
}]);
$(function () {
setTimeout(function () {
$("select").select2();
}, 100);
});
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.1/js/select2.full.min.js"></script>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.1/css/select2.min.css" />
<div ng-app="test">
<div ng-controller="TestController">
<div>Country:
<select ng-model="country" ng-options="country.name as country.name for country in countries" ng-change="getStates()">
<option value=''>Select</option>
</select>
</div>
<div>States:
<select id="state" ng-disabled="!country" ng-model="state" ng-options="state.name as state.name for state in states" ng-change="getCity()">
<option value=''>Select</option>
</select>
</div>
<div>City:
<select id="city" ng-disabled="!country || !state" ng-model="city" ng-options="city.name as city.name for city in cities" ng-change="alertCity()">
<option value=''>Select</option>
</select>
</div>
</div>
</div>
&#13;