【问题标题】:AngularJS - Set default value on select inside a ng-repeat [duplicate]AngularJS - 在 ng-repeat 中设置默认值 [重复]
【发布时间】:2015-07-17 06:26:06
【问题描述】:

我遇到了 AngularJS 的问题 - 我无法在 <select> 中显示所选值。

这是我的用例:

我有一个以 ng-repeat 开头的视图来显示组件。每个组件都包含一个用于选择增值税率的选项。创建新项目时,它看起来不错。但是当我编辑现有项目时,实际的增值税代码不会显示在选择中,而是看到默认选项“-- 选择增值税率--”而不是所选的增值税。

我的模型仅包含增值税率的 ID。

对于单个组件,我可以使用 $scope 中的变量来设置当前项目值,但在这里我可以有多个组件,每个组件都有自己的增值税率,所以我不知道如何在此处执行此操作:

这是我的代码

<div ng-repeat="i in items">
   <label>{{i.id}}</label>
   <input ng-model="i.title">
   <select ng-model="i.vatRateId">
      <option value="">--- Select an option ---</option>
      <option ng-repeat="value in vatRates"
              ng-selected="i.vatRateId == value.id"
              value="{{value.id}}">{{value.value}}     
      </option>
   </select>
</div>

还有对象:

$scope.vatRates = [
    { 'id': 1, 'value' : '20' },
    { 'id': 2, 'value' : '10' },
    { 'id': 3, 'value' : '7' }
];

$scope.items = [
    { 'id': 1, 'title' : 'Title1', 'vatRateId' : '1' },
    { 'id': 2, 'title' : 'Title2', 'vatRateId' : '2' },
    { 'id': 3, 'title' : 'Title3', 'vatRateId' : '3' }
];

这是一个现场演示来解释我的问题:

Demo on PLNKR

我无法为每个项目设置正确的选择值。

【问题讨论】:

  • 当然,我们可以帮助您。但是你能先帮助我们吗?通过删除标记和样式的不相关部分来帮助我们?然后,为了避免猜测和假设,让我们了解您使用的一些对象和一些函数的结构,例如updateVatRatesettings?为了额外的奖励,也许将一些变量/文本翻译成英文(看看这是一个英文网站)。我为您修复了一些问题 - 请添加有关丢失代码的更多详细信息,下次请花时间解决您的问题。
  • 感谢@NewDev,我想我已经很清楚了 ^^ 没关系,这里有一个现场演示来解释我的问题。 plnkr.co/edit/OROLI64Q13PlJhSE4GOl?p=preview我无法为每个项目设置正确的值
  • 你有一个演示很好,但问题应该是独立的 - 我更新了它,如果你觉得它没有反映你的实际问题,请修复编辑。
  • accept 答案有太多问题,对其他读者有用。

标签: javascript angularjs select angularjs-ng-repeat


【解决方案1】:
<select ng-model="val" ng-init="myval = vals[0]">
    <option ng-repeat="myval in vals" value="{{myval.value}}">{{val.name}}
    </option>
</select>

【讨论】:

【解决方案2】:

您应该通过控制器而不是 ng-init 在 ng-model 上设置默认值。来自docs

ngInit 唯一合适的用途是为 ngRepeat 的特殊属性设置别名,如下面的演示所示。除了这种情况,您应该使用控制器而不是 ngInit 来初始化作用域上的值。

— AngularJS ng-init Directive API Reference - Overview

angular.module('app', [])
.controller('SelectController', function() {

    var selectCtrl = this;
  selectCtrl.values = ["Value 1", "Value 2", "Value 3"];
  selectCtrl.selectedValue = "Value 1";
})
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div ng-app="app" ng-controller="SelectController as selectCtrl">
<select ng-model="selectCtrl.selectedValue"> 
  <option ng-repeat="value in selectCtrl.values" value="{{value}}">{{value}}     </option> 
  </select>
</div>

【讨论】:

  • 但是你不能切换选项
【解决方案3】:

我不太清楚您的要求,但如果您想将默认选择值显示为&lt;select&gt;,您可以使用 ng-selected。为了使用它,您需要在控制器中将 default selected value 作为 model 到您的 &lt;select&gt; 并将 ng-selected 添加到您的 &lt;options ng-selected="{{defaultvalue == value.id}}" ng-repeat="value in vatRates"&gt;

对于代码和参考,我刚刚更改了您的 plunker,

http://embed.plnkr.co/ZXo8n0jE8r3LsgdhR0QP/preview

希望这会有所帮助。

【讨论】:

【解决方案4】:

这是我设法做到这一点的唯一方法,并且当另一个选择发生变化时它就完成了。 (也许这就是其他解决方案不起作用的原因,请注意额外的 ""+ 以强制它为字符串。(否则不起作用)

在控制器中:

$scope.formData.number_of_persons = "̲"̲+̲ $scope.numberOfPersons[0].val;

HTML:

<select name="number_of_persons" 
        id="number_of_persons" 
        ng-model="formData.number_of_persons" 
        required>
    <option ng-repeat="option in numberOfPersons" value="{{option.val}}">
        {{option.val}}
    </option>
</select>

【讨论】:

猜你喜欢
  • 2014-02-16
  • 1970-01-01
  • 1970-01-01
  • 2014-02-22
  • 2016-12-11
  • 2015-04-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多