【问题标题】:Select value not selected in Angularjs选择 Angularjs 中未选择的值
【发布时间】:2019-01-29 17:16:21
【问题描述】:

我有这个 html 标记:

    <div ng-repeat="prop in props" style="margin-bottom: 10px;">
  <label class="col-md-4 control-label">Property {{$index + 1}} ({{prop.AddressLine1}})</label><div class="col-md-8">
       <select ng-model="prop.Grade" class="form-control" ng-options="opt.name for opt in propGradings track by opt.id">                                                                       <option ng-selected="{{option.id == prop.Grade}}" ng-repeat="option in propGradings" ng-value="{{option.id}}">{{option.name}}</option>     </select>
   </div>
 </div>

这个静态数组要填写下拉:

$scope.propGradings = [{ name: "1", id: 1 }, { name: "2", id: 2 }, { name: "3", id: 3 }, { name: "4", id: 4 }];

我能够加载下拉列表中的项目,但我无法根据 prop.Grade 值预先选择正确的值。

HTML 输出:

知道我做错了什么吗?

【问题讨论】:

  • prop.Grade 有值吗?如果 ng-model 值未定义,或者是非字符串值,通常会发生这种情况。
  • 你在 prop.Grade 中投入了什么价值? obj 还是 id?
  • @mhodges 它的实际 int,应该是字符串?
  • 您希望它根据 id 或所选值的名称进行绑定吗?

标签: angularjs angularjs-scope angularjs-ng-repeat


【解决方案1】:

从下拉列表中选择选项时,类型很重要以进行绑定。使用ng-options 时,您可以使用 as 将某些内容作为非字符串值绑定到模型。在您的情况下,您可能希望绑定到 id 的整数值。

语法: select as label for value in array

> select:绑定到 ng-model 的值
> 标签:下拉菜单中明显显示的值
> 值:数组中的当前项
> 数组:生成选项的数据源

绑定到整数值的示例:

var app = angular.module("myApp", []);
app.controller("myCtrl", function ($scope) {
  $scope.props = [{Grade: 1}];
  $scope.propGradings = [{ name: "1", id: 1 }, { name: "2", id: 2 }, { name: "3", id: 3 }, { name: "4", id: 4 }];

});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div ng-app="myApp" ng-controller="myCtrl">
  Binding with an integer value:
  <div ng-repeat="prop in props" style="margin-bottom: 10px;">
    <label class="col-md-4 control-label">Property {{$index + 1}} ({{prop.AddressLine1}})</label>
    <div class="col-md-8">
      <select ng-model="prop.Grade" class="form-control" ng-options="opt.id as opt.name for opt in propGradings">
        <option ng-selected="{{option.id == prop.Grade}}" ng-repeat="option in propGradings" ng-value="{{option.id}}">{{option.name}}</option>
      </select>
    </div>
  </div>
</div>

绑定到字符串值的示例:

var app = angular.module("myApp", []);
app.controller("myCtrl", function ($scope) {
  $scope.props = [{Grade: "1"}];
  $scope.propGradings = [{ name: "1", id: 1 }, { name: "2", id: 2 }, { name: "3", id: 3 }, { name: "4", id: 4 }];

});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div ng-app="myApp" ng-controller="myCtrl">
  Binding with a string value:
  <div ng-repeat="prop in props" style="margin-bottom: 10px;">
    <label class="col-md-4 control-label">Property {{$index + 1}} ({{prop.AddressLine1}})</label>
    <div class="col-md-8">
      <select ng-model="prop.Grade" class="form-control" ng-options="opt.name as opt.name for opt in propGradings">
        <option ng-selected="{{option.id == prop.Grade}}" ng-repeat="option in propGradings" ng-value="{{option.id}}">{{option.name}}</option>
      </select>
    </div>
  </div>
</div>

【讨论】:

    猜你喜欢
    • 2015-04-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-21
    • 2014-07-04
    • 2016-03-25
    相关资源
    最近更新 更多