【问题标题】:angularjs dependant dropdown option valueangularjs 依赖下拉选项值
【发布时间】:2015-04-20 01:06:22
【问题描述】:


我已经使用 angularjs 成功设置了一个依赖下拉列表,但我有一个小问题:
我需要定义每个选项标签的值,因为它是由角度处理器自动设置的。
这是我的 html 代码:

            <div ng-controller="CountryCntrl">

                 <select id="country" ng-model="states" ng-options="country for (country, states) in countries"> 
                  <option value=''>Choose</option>
                 </select>

                Departement: 
                <select id="state" ng-disabled="!states">
                <option value="">Choose</option>
                <option ng-repeat="state in states" value="{{state.id}}">{{state.dep}}</option>
                </select>
            </div>

            <br/>
            <input type="submit" value="go">


这是我的 angularjs 代码:

<script>
    var Aplic = angular.module("Aplic", []);

    Aplic.controller('CountryCntrl', function($scope){

        $scope.countries = {
                        'Aquitaine': [ {'id':'22', 'dep': "Dordogne"}, { 'id':'31', 'dep' : "Gironde"} ], 
                        'Auvergne':  [ {'id' : '3', 'dep' : "Allier"}, {'id' : '15', 'dep' : "Cantal"} ]
                        };            
    });

    </script>


我再说一遍,我已经成功地在第二个下拉列表中设置了选项的值,但是对于第一个下拉列表,它会自动使用变量国家的名称。

那么我应该如何更改我的代码,以便为第一个下拉菜单中的每个选项标签指定一个特定值。

为了更好地理解我的想法,请检查每个下拉列表中的值。这是我在 plunker 上工作的 sn-p:
http://embed.plnkr.co/VBdxGDQNOJSHeGVfloo2/preview
任何帮助将不胜感激。


这是我想做的:

<select id="state" ng-model="cou">
                        <option value="">Choisir</option>
                        <option ng-repeat="cou in countries" value="{{cou.id}}">{{cou.name}}</option>
                    </select>

                    <select id="state" ng-disabled="!cou">
                        <option value="">Choisir</option>
                        <option ng-repeat="state in cou.states" value="{{state.id}}">{{state.dep}}</option>
                    </select>

但现在第二个下拉菜单不起作用,如果您能确定问题将得到解决

【问题讨论】:

  • 您是否正在考虑为国家/地区列表设置唯一值/代码?如果是这样,您将需要稍微更改您的数据结构
  • 是的,我需要为国家列表设置一个唯一的值/代码(就像在第二个下拉列表中所做的那样),并确保它需要更改数据结构
  • 为什么需要这样做?绑定到选项的每个对象都是唯一的对象。如果您使用 ng-model 它将包含已在选择中选择的特定对象。您不需要将任何特定值放入选项的“值”属性中。
  • 我会解释更多;第一个下拉列表中的每个元素都代表一个具有特定代码的区域,我必须将其放入选项标签的值中(因为这个 sn-p 是表单的一部分),但是使用我的代码,标签选项的值获取名称区域自动像这样:
    我必须这样做,例如:

标签: angularjs ng-options


【解决方案1】:

这是为您提供的示例实现。这会将值保留在选项标签中。

<div ng-app="Aplic" ng-controller="CountryCntrl">
    <select id="country" ng-model="selectedCountry" ng-options="country.id as country.name for country  in countries track by country.id">
        <option value="">Choose</option>
    </select>Departement:
    <select id="state"
    ng-model="selectedState"
    ng-disabled="!selectedCountry"
    ng-options="state.id as state.dep for state in ((countries | filter:{'id':selectedCountry})[0].states) track by state.id">
        <option value="">Choose</option>
    </select>


    <div>selectedCountry id: {{selectedCountry}}</div>
    <div>selectedState id: {{selectedState}}</div>
</div>

控制器:

 $scope.countries =[
   {
     'id': '1',
      'name': "Aquitaine",
      'states': [{
         'id': '22',
         'dep': "Dordogne"
     }, {
         'id': '31',
         'dep': "Gironde"
     }]
   },
   {
     'id': '2',
      'name': "Auvergne",
      'states':  [{
         'id': '3',
         'dep': "Allier"
     }, {
         'id': '15',
         'dep': "Cantal"
     }]
   }];

Working demo

【讨论】:

  • 你已经很好地改变了结构,但是那些 id 需要放在每个选项标签的 value 属性中。如果您使用的是 chrome,请检查这些下拉菜单元素并查看
  • 你明白我的想法了吗,还是我应该解释更多?
  • 所以你想在不改变结构的情况下设置值?当您可以在选择时获取整个选定对象时,我仍然不明白为什么要在每个选项标签中设置值。
  • 你做的结构很好。我必须在每个选项标签中设置值,因为这个 sn-p 是某些表单的一部分,我需要它来使用这些值验证最后一个。
  • 我刚刚测试了它,我想你明白我的想法,但你的代码不能正常工作。抱歉打扰了
猜你喜欢
  • 2017-12-20
  • 1970-01-01
  • 2014-08-28
  • 1970-01-01
  • 2021-02-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多