ng-options的全局错误。如何?

时间:2015-12-14 18:31:32

标签: javascript angularjs

我偶然发现了我在项目中遇到的最令人费解的错误:我打破了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.73IE 11.0.9600.18125,Firefox版本42.0 build 20151029151421或(最新版本的)Safari中出现。

1 个答案:

答案 0 :(得分:0)

看来这个问题已知并由AngularJS(see the Chromium post here)修复。请注意,在我的帖子中我使用的是Angular 1.2.3。我现在已经升级(无痛地添加)到Angular 1.4.8。升级到最新版本的Angular解决了我的问题。