我偶然发现了我在项目中遇到的最令人费解的错误:我打破了ng-options
。
我的意思是什么?
我的意思是我的整个项目中使用select
的 ng-options
无法正常工作,而且我不知道是什么造成的(我'我们整个上午都在退出改变了!)
以下是行为:
我有ng-options
:
$scope.fileComparisonMethods = [
{
name: 'MD5',
value: 0
},
{
name: 'SHA1',
value: 1
},
{
name: 'SHA256',
value: 2
},
{
name: 'SHA384',
value: 4
},
{
name: 'SHA512',
value: 5
},
{
name: 'RIPEMD',
value: 3
}
];
..和我的ng-model
:
$scope.comparisonMethod = $scope.fileComparisonMethods[0].value;
..这是我的select
:
<select ng-model="comparisonMethod" ng-options="option.value as option.name for option in fileComparisonMethods" class="form-control input-small" />
我的select
填充了正确的选项,但选择任何选项都不会更新ng-model
。如果我在ng-change
上放置select
,则不会调用ng-change
。
现在,如果我将ng-model
初始化为ng-options
中不存在的值:
$scope.comparisonMethod = -1;
...并在我的选择中放置ng-change
:
<select ng-model="comparisonMethod" ng-options="option.value as option.name for option in fileComparisonMethods" ng-change="changeHappened()" class="form-control input-small" />
..然后我的ng-change
将在第一次选择时被调用,ng-model
将不会被更新,并且ng-change
将不会触发任何后续选择。
奇怪吧?
最后,如果我写select
而不是ng-options
而不是:
<select ng-model="comparisonMethod" class="form-control input-small">
<option value=0>MD5</option>
<option value=1>SHA1</option>
<option value=2>SHA256</option>
<option value=4>SHA384</option>
<option value=5>SHA512</option>
<option value=3>RIPEMD</option>
</select>
..一切正常!那么ng-options
发生了什么?!我做了什么?!
请记住,在我的项目中使用select
的每个 ng-options
突然发生了这种情况,所以全球ng-options
发生了一些事情 。什么可能导致这种行为。
我无法在JSFiddle或Plunkr中复制此问题。遗憾。
更新2015-14-12 20:13:00
此问题仅发生在Chrome版本47.0.2526.80 m
和Opera版本34.0.2036.25
中,这是目前这些浏览器的最新版本。据我所知,这个版本于12月1日发布。此问题不会在Chrome版本47.0.2526.73
,IE 11.0.9600.18125
,Firefox版本42.0 build 20151029151421
或(最新版本的)Safari中出现。
答案 0 :(得分:0)
看来这个问题已知并由AngularJS(see the Chromium post here)修复。请注意,在我的帖子中我使用的是Angular 1.2.3。我现在已经升级(无痛地添加)到Angular 1.4.8。升级到最新版本的Angular解决了我的问题。