簡體   English   中英

創建兩個動態下拉菜單

[英]Create two dynamic dropdown menus

我目前正在嘗試創建一種表單,以便從兩個相關的下拉菜單中選擇選項。 如果要更改上方的選項,則下方的數據也應根據上方的一個而更改。
因此,我創建了一個小示例,您首先選擇一個國家。 之后,您可以從該國家中選擇一個城市。
數據存儲在本地數組中,以后將通過服務獲取。 數據應保存在對象數組中,因為這是服務提供數據的方式,因此無需進行轉換。

在這里,您可以看到我非常簡單的代碼,由於我不知道如何創建這種“交流”形式,因此這只是一個備用骨架。 希望你們能幫助我解決此類問題。

的HTML

<body ng-app="AngularApp">
  <div ng-controller="MainCtrl as Main">
    <h1>{{Main.message}}</h1>
    country:
    <select name="country">
      <option></option>
    </select>
    <br/>city:
    <select name="city">
      <option></option>
    </select>
  </div>
  <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
</body>

App.js

var app = angular.module('AngularApp', []);

app.controller("MainCtrl", function() {
  var vm = this;

  vm.message = "Select your destination";
  vm.data = [
    { city: 'Berlin',         country: 'Germany' },
    { city: 'Hamburg',        country: 'Germany' },
    { city: 'Munich',         country: 'Germany' },
    { city: 'New York',       country: 'USA' },
    { city: 'Whashington DC', country: 'USA' },
    { city: 'Paris',          country: 'France' }
  ];
});

 var app = angular.module('AngularApp', []); app.controller("MainCtrl", function() { var vm = this; vm.message = "Select your destination"; vm.data = [ { city: 'Berlin', country: 'Germany' }, { city: 'Hamburg', country: 'Germany' }, { city: 'Munich', country: 'Germany' }, { city: 'New York', country: 'USA' }, { city: 'Whashington DC', country: 'USA' }, { city: 'Paris', country: 'France' } ]; }); 
 <body ng-app="AngularApp"> <div ng-controller="MainCtrl as Main"> <h1>{{Main.message}}</h1> country: <select name="country"> <option></option> </select> <br/>city: <select name="city"> <option></option> </select> </div> <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script> <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script> </body> 


附加說明:
因此,如果您選擇“德國”作為您的國家,則在城市選擇中,由於country屬性,選項“柏林”,“漢堡”和“慕尼黑”應該僅可用。 不會顯示其他城市,如巴黎或紐約。


編輯如果默認情況下選擇一個國家,這也很好,這樣就不會顯示空的下拉菜單。

您可以使用'angular-filter'模塊顯示唯一的選項。

<select name="country" ng-model="country">
    <option ng-repeat="option in Main.data | unique: 'country'"
            value="{{option.country}}">{{option.country}}</option>
</select>

<select name="city" ng-model="city">
    <option ng-repeat="option in Main.data" ng-if="option.country == country"
            value="{{option.city}}">{{option.city}}</option>
</select>

我在表單中添加了一些Bootstrap類來清理其演示文稿。 :)

 var app = angular.module('AngularApp', ['angular.filter']); app.controller("MainCtrl", function() { var vm = this; vm.message = "Select Your Destination"; vm.data = [ { city: 'Berlin', country: 'Germany' }, { city: 'Hamburg', country: 'Germany' }, { city: 'Munich', country: 'Germany' }, { city: 'New York', country: 'USA' }, { city: 'Whashington DC', country: 'USA' }, { city: 'Paris', country: 'France' } ]; }); 
 <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/angular-filter/0.5.11/angular-filter.min.js"></script> <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script> <link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet" /> <body ng-app="AngularApp"> <div ng-controller="MainCtrl as Main" class="container"> <h1>{{Main.message}}</h1> <form> <div class="form-group"> <label>Country</label> <select name="country" ng-model="country" class="form-control"> <option ng-repeat="option in Main.data | unique: 'country'" value="{{option.country}}">{{option.country}}</option> </select> </div> <div class="form-group"> <label>City</label> <select name="city" ng-model="city" class="form-control"> <option ng-repeat="option in Main.data" ng-if="option.country == country" value="{{option.city}}">{{option.city}}</option> </select> </div> <br /> <button type="submit" class="btn btn-default">Submit</button> </form> </div> </body> 

HTML代碼

<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8">
    <title>Login</title>
  </head>
  <body ng-app="AngularApp">

  <div ng-controller="MainCtrl as Main">
    <h1>{{Main.message}}</h1>
    country:
    <select name="country" ng-model="cont" ng-init="cont = cont || 'Germany'">   
        <option ng-selected="$first" ng-repeat="con in Main.data | unique:'country'">{{con.country}}</option> 
    </select>
    <br/>
    city:
    <select name="city" ng-model="cit">
        <option ng-selected="$first" ng-repeat="ct in Main.data | filter:{country: cont}">{{ct.city}}</option>
    </select>
  </div>



  <script src="//ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js" type="text/javascript"></script>
  <script src="//ajax.googleapis.com/ajax/libs/angularjs/1.2.25/angular.min.js" type="text/javascript"></script>
  <script src="app.js"></script>
  </body>
</html>

app.js創建一個名為“ unique”的過濾器。 所以您的app.js就是這樣。

var app = angular.module('AngularApp', []);
app.controller("MainCtrl", function() {
    var vm = this;

    vm.message = 'select your destination';

    vm.data = [{city: 'Berlin', country: 'Germany'},
               {city: 'Hamburg', country: 'Germany'},
               {city: 'Munich', country: 'Germany'},
               {city: 'New York', country: 'USA'},
               {city: 'Whashington DC', country: 'USA'},
               {city: 'Paris', country: 'France'}
            ];
});
app.filter('unique', function() {
  return function (arr, field) {
    var o = {}, i, l = arr.length, r = [];
    for(i=0; i<l;i+=1) {
      o[arr[i][field]] = arr[i];
    }
    for(i in o) {
      r.push(o[i]);
    }
    return r;
  };
});

 var app = angular.module('AngularApp', ['angular.filter']); app.controller("MainCtrl", function() { var vm = this; vm.message = "Select Your Destination"; vm.data = [ { city: 'Berlin', country: 'Germany' }, { city: 'Hamburg', country: 'Germany' }, { city: 'Munich', country: 'Germany' }, { city: 'New York', country: 'USA' }, { city: 'Whashington DC', country: 'USA' }, { city: 'Paris', country: 'France' } ]; }); 
 <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/angular-filter/0.5.11/angular-filter.min.js"></script> <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script> <link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet" /> <body ng-app="AngularApp"> <div ng-controller="MainCtrl as Main" class="container"> <h1>{{Main.message}}</h1> <form> <div class="form-group"> <label>Country</label> <select name="country" ng-model="country" class="form-control"> <option value="" selected="selected">Choose one</option> <option ng-repeat="option in Main.data | unique: 'country'" value="{{option.country}}">{{option.country}}</option> </select> </div> <div class="form-group"> <label>City</label> <select name="city" ng-model="city" class="form-control"> <option value="" selected="selected">Choose one</option> <option ng-repeat="option in Main.data" ng-if="option.country == country" value="{{option.city}}">{{option.city}}</option> </select> </div> <br /> <button type="submit" class="btn btn-default">Submit</button> </form> </div> </body> 

您可以在下面的HTML中使用:

Country:
<select name="country" ng-model="country">
  <option ng-repeat="option in Main.data" value="{{option.country}}">{{option.country}}</option>
</select>

City:
<select name="city" ng-model="city">
  <option ng-repeat="option in Main.data" ng-if="option.country == country" value="{{option.city}}">{{option.city}}</option>
</select>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM