【问题标题】:Angularjs ng-model complex link between two select tagsAngularjs ng-model 两个选择标签之间的复杂链接
【发布时间】:2016-05-05 17:47:23
【问题描述】:

我有一个包含车辆趋势列表和相应型号的 json。

var availables = {
  "trends": [
    {"label": "ALFA ROMEO"}
  ],
  "models": {
    "ALFA ROMEO": [
      {"label": "159"},
      {"label": "4C"},
      {"label": "AR8C SPIDER"},
      {"label": "BRERA"},
      {"label": "GIULIETTA"},
      {"label": "MITO"},
      {"label": "SPIDER"}]
  }
}

我想在两个select 中显示它们。第一个选择必须以第二个为条件。我确实喜欢这个,而且效果很好。当我选择一个趋势时,另一个select只给我展示了好的模型。

<label class="item item-input item-select">
  <span class="input-label">Véhicule</span>
  <select ng-model="vehicle.trend" ng-options="trend.label for trend in trends_availables.trends">
    <option ng-disabled="true" ng-selected="true" value="">{{"select_trend" | translate}}</option>
  </select>
</label>

<label class="item item-input item-select">
  <span class="input-label">Modèle</span>
  <select ng-model="vehicle.model" ng-options="model.label for model in trends_availables.models[vehicle.trend.label]">
    <option ng-disabled="true" ng-selected="true" value="">{{"select_model" | translate}}</option>
  </select>
</label>

我的问题来了。当我已经创建了vehicle 时,selects 并没有显示出良好的趋势和模型。由于vehicle.trend 是一个对象,我可以理解ng-model 无法获取label 属性。

我怎样才能使两个select 相互依赖并且趋势/模型显示良好的标签?

当我得到一个像 $scope.vehicle = {"trend": {"label": "ALFA ROMEO"}, "model": {"label": "159"}}; 这样的 vehicle 时,我希望选择显示好的信息。

【问题讨论】:

  • 您能否详细说明您的问题?我知道它正在工作,但您的问题尚不清楚。一旦我知道问题所在,我创建了一个 CodePen 来帮助找出解决方案。 CodePen Demo
  • 我已经更新了我的问题。
  • 澄清一下,您现在要删除选择输入中与您已经选择的内容匹配的所有其他选择选项
  • 当我的车辆对象是{"trend": {"label": "ALFA ROMEO"}, "model": {"label": "159"}};时,我希望在 ALFA ROMEO 上选择趋势的选择选项,在 159 上选择模型一。这样我可以看到车辆是什么并更改趋势或模型。
  • 但这正是正在发生的事情,不是吗?当您从选择输入元素中选择一个选项时,该选择输入将设置为所选选项。

标签: angularjs angular-ngmodel


【解决方案1】:

如果您能详细说明一下可能会有所帮助,但这个 codepen 可能会展示您的需求:http://codepen.io/Findiglay/pen/mPajZB?editors=1010

我稍微改变了选择菜单,如下:

 <label class="item item-input item-select">
    <span class="input-label">Véhicule</span>
    <select ng-model="vehicle.trend" ng-options="trend.label for trend in availables.trends", ng-change="updateModels()">
      <option value=""> -- Select a Trend -- </option>
    </select>
  </label>

  <label class="item item-input item-select">
    <span class="input-label">Modèle</span>
    <select ng-model="vehicle.model" ng-options="model.label for model in filteredModels">
    </select>
  </label>

如果这不能完全解决问题,请告诉我,我可以提供进一步帮助。

编辑:我已更新答案以自动选择所选模型的可用车辆。现在这是否解决了您所描述的问题?

当您从选择输入元素中选择一个选项时,该选择 然后将输入设置为所选选项

我已经对上面的 html 进行了更新,并添加了以下函数以使用 ng-change 触发:

 /** Update Available Models when a trend is selected **/
  $scope.updateModels = function() {
    if ($scope.vehicle.trend && availables.models[$scope.vehicle.trend.label]) {
     $scope.filteredModels = availables.models[$scope.vehicle.trend.label]; 
    } else {
     $scope.filteredModels = [{
       label: '-- Select a Model --'
     }];
    }
    $scope.vehicle.model = $scope.filteredModels[0];
  };

检查代码笔!希望这会有所帮助。

【讨论】:

  • 这能解决问题吗?
  • 不,但我认为我无法解释我的问题,因为你给了我与我需要的相反的东西。我需要的是当vehicle 模型设置(通过ajax)select 标签显示趋势和模型的好标签。
猜你喜欢
  • 2018-11-13
  • 1970-01-01
  • 2023-03-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-29
  • 2013-11-10
  • 1970-01-01
相关资源
最近更新 更多