1
Angular에서 3 단계 종속 드롭 다운을 만들었지 만 저장된 쿠키로 값을 채우는 데 문제가 있습니다. 경우에 따라 세 개 모두 올바르게 채워지며 때로는 빈 문자열로 표시되기도합니다. 1 또는 2조차도 채워지지만 세 번째는 채워지지 않는 경우도 있습니다. HTML 코드에서 단락 태그에 모델을 노출 했으므로 값이 쿠키에서 검색되지만 선택 드롭 다운에 표시되지 않습니다. 아래의 사소한 실수는 용서해주십시오.Angular.js의 쿠키가있는 종속 선택 드롭 다운
컨트롤러 :
angular.module("CountryApp").controller("filterController", ['$scope', '$http', '$location', '$cookies', function ($scope, $http, $location, $cookies)
{
// Getting cookies and trying to assign to models
$scope.loadCookies = function() {
var cityCookie = JSON.parse($cookies.get('country'));
if (cityCookie == null) {
return;
} else {
$scope.selectedCountry = JSON.parse($cookies.get('country'));
$scope.selectedState = JSON.parse($cookies.get('state'));
$scope.selectedCity = cityCookie;
}
};
// When save button is clicked...
$scope.changedValue = function(country, state, city) {
$scope.selectedCountry = country;
$scope.selectedState = state;
$scope.selectedCity = city;
// Add to cookies
$cookies.put('country', JSON.stringify(country));
$cookies.put('state', JSON.stringify(state));
$cookies.put('city', JSON.stringify(city));
};
$scope.list = [
{ 'COUNTRY': 'USA', 'STATE': 'Ohio', 'CITY': 'Cleveland' },
{ 'COUNTRY': 'USA', 'STATE': 'Ohio', 'CITY': 'Columbus' },
{ 'COUNTRY': 'USA', 'STATE': 'Ohio', 'CITY': 'Cincinnati' },
{ 'COUNTRY': 'USA', 'STATE': 'Ohio', 'CITY': 'Akron' },
{ 'COUNTRY': 'USA', 'STATE': 'California', 'CITY': 'Los Angeles' },
{ 'COUNTRY': 'USA', 'STATE': 'California', 'CITY': 'San Diego' },
{ 'COUNTRY': 'USA', 'STATE': 'California', 'CITY': 'San Francisco' },
{ 'COUNTRY': 'USA', 'STATE': 'California', 'CITY': 'Santa Monica' },
{ 'COUNTRY': 'Canada', 'STATE': 'Alberta', 'CITY': 'Edmonton' },
{ 'COUNTRY': 'Canada', 'STATE': 'Alberta', 'CITY': 'Calgary' },
{ 'COUNTRY': 'Canada', 'STATE': 'British Columbia', 'CITY': 'Victoria' },
{ 'COUNTRY': 'Canada', 'STATE': 'British Columbia', 'CITY': 'Vancouver' },
];
}]);
// Custom filter to only return uniques. I put it here just for readability on stackoverflow
app.filter('unique', function() {
return function(collection, keyname) {
// we define our output and keys array;
var output = [],
keys = [];
angular.forEach(collection, function(item) {
var key = item[keyname];
if(keys.indexOf(key) === -1) {
keys.push(key);
output.push(item);
}
});
return output;
};
});
HTML :
<div class="form-group" ng-init="loadCookies()">
<div ng-app="CountryApp">
<select class="form-control" id="country" ng-model="selectedCountry" ng-options="option.COUNTRY for option in list | unique:'COUNTRY'">
<option value="" disabled selected>Country</option>
</select>
<select class="form-control" id="state" name="state" ng-model="selectedState" ng-disabled="!selectedCountry" ng-options="option.STATE for option in list | unique: 'STATE' | filter: { COUNTRY: selectedCountry.COUNTRY }">
<option value="" disabled selected>State</option>
</select>
<select class="form-control" id="city" name="city"
ng-model="selectedCity" ng-disabled="!selectedArea"
ng-options="option.CITY for option in list | unique: 'CITY' | filter: {STATE: selectedState.STATE, COUNTRY: selectedCountry.COUNTRY}">
<option value="" disabled selected>City</option>
</select>
<p>Selected Country: {{ selectedCountry }} </p>
<p>Selected State: {{ selectedState }}</p>
<p>Selected City: {{ selectedCity }}</p>
</div>
</div>
캐나다에 대한 쿠키를 변경 한 후에도 앨버타와 미국이있는 경우 서로 필터링하는 경우 어떻게되는지 알기가 어렵습니다. –
가끔 세 번째 드롭 다운 (도시)가 때때로 내가 선택하지 않았거나 쿠키에 저장 한 완전히 임의의 도시로 선택하는 경우가 있습니다. – NJC
내가 말한 것은 NG 옵션이 선택된 값을 무시하고 있다는 것입니다. 그것없이 무엇이 일어나는지 보지 않으려 고 노력하십시오. –