【问题标题】:Initial value of select not set in AngularJSAngularJS中未设置选择的初始值
【发布时间】:2015-12-21 03:14:57
【问题描述】:

在 AngularJS 1.3 应用程序中,我有一个表单,我在该表单上从后端异步获取选择控件的模型和可能值。当我在ng-options 中使用的值之前获得模型值时,选择控件中不会选择任何选项。 我设法重现了这种行为:

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

app.controller('MainCtrl', function($scope, $timeout) {
  $scope.model = { value: 101 };

  $timeout(function() {
    $scope.model.values = [100, 101, 102, 103];
  }, 1000);

});

查看:

Options: <select ng-model="model.value"
      ng-options="v for v in model.values">
      <option value="">Select some...</option>
    </select>

超时后模型具有其旧值 101 但未选择任何选项。 目前我通过在选择时使用ng-if="model.values" 找到了一种解决方法,但我觉得应该有更好的方法来做到这一点。

有人可以解释为什么没有选择选项吗?

Plunkr:http://plnkr.co/edit/4opZRJzdDfJhSNJx8RMF

编辑:我在 Firefox 中打开 Plunkr 并开始工作,然后我回到 Chrome 并没有工作,看起来像是跨浏览器问题...

【问题讨论】:

  • 这似乎是 Angular 1.3 特有的;该代码在 angular 1.2 和当前版本 1.4.6 中正常工作
  • 我不确定,但我怀疑这应该因为无法重现而关闭,因为所展示的问题仅影响特定的框架版本,并且当前稳定版本中不存在。

标签: angularjs


【解决方案1】:

看起来这是 AngularJs 1.3.x 中的 regression

您提供的示例在 AngularJs 1.2.x 和 1.4.x 中运行良好。

【讨论】:

  • 将项目更新到 AngularJs 1.4 解决了这个问题(昨天我在 Plunker 上进行了愚蠢的错误测试,我再次检查它并且它有效)
【解决方案2】:

我同意@PrimosK 关于问题的看法。

解决方法是添加跟踪:

 ng-options="v for v in model.values track by v" 

Plunker

中的示例

【讨论】:

    猜你喜欢
    • 2015-05-11
    • 2013-12-10
    • 1970-01-01
    • 1970-01-01
    • 2012-09-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多