2015-09-23 84 views
5

在AngularJS 1.3应用程序中,我有一个表单,我可以从后端异步获取选择控件的模型和可能值。当我在ng-options中使用的值之前获取模型值时,选择控件中将不会选择任何选项。 我设法重现此问题:未在AngularJS中设置的选择的初始值

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和它不工作的样子跨浏览器的问题...

+0

这似乎是特定于角1.3;该代码在角1.2中正常工作,并在当前版本1.4.6 – Claies

+0

我不确定,但我怀疑这应该被关闭为不可复制的,因为演示的问题仅影响特定的框架版本,并且不存在于当前的稳定版本中。 – Claies

回答

0

我同意@PrimosK关于问题。

的解决方案是增加跟踪:

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

例如在Plunker

1

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

您提供的示例在AngularJs 1.2.x和1.4.x中可以正常工作。

+0

不客气。 – PrimosK

+0

将项目更新到AngularJs 1.4解决了这个问题(昨天我在Plunker上做了一个愚蠢的错误测试,我再次检查它,它工作) – csharpfolk