在Internet Explorer - AngularJS 1.3中未正确更新ngModel

akn*_*akn 3 javascript internet-explorer angularjs angularjs-ng-model

您好,我有一个奇怪的问题,只出现在角色1.3的IE 11中.

我有一个指令,它使我能够存储ObjectngModel价值input元素.它对AngularJS 1.2没有任何问题,但它不适用于AngularJS 1.3(仅在Internet Explorer中).

它只是代码:

elem.on('input', function(){
   var val = elem.val();
    ngModel.$setViewValue({
        'sampleData': new Date().getTime(),
        'value': val
    });
    scope.$apply();
});
Run Code Online (Sandbox Code Playgroud)

当我在IE中键入文本时,输入将正确的对象设置为模型值几毫秒,但接下来将其更改为字符串.在其他浏览器中,它ngModel正确更新.

你可以在那里看到这种奇怪的行为:

AngularJS 1.2:http://jsfiddle.net/aartek/e6Lvpqj3/(适用于IE,Chrome和Firefox),

AngularJS 1.3:http://jsfiddle.net/aartek/mvx9dbyu/2/(在IE 11中不起作用,适用于Chrome和Firefox)

是什么原因,我该如何解决?

这是我的全部指示:

app.directive('myInput',function(){
    return{
        restrict: 'A',
        require: 'ngModel',
        scope: {},
        priority: 1,
        link: function(scope, elem, attrs, ngModel){
            elem.off('input');
            elem.off('change');

            ngModel.$render = function(){
                var model = {
                    'sampleData': 'sampleData',
                    value: ''
                }                                   
                ngModel.$setViewValue(model);
                elem.val(model.value);
            }

            elem.on('input', function(){
               var val = elem.val();
                ngModel.$setViewValue({
                    'sampleData': new Date().getTime(),
                    value: val
                });
                scope.$apply();
            });
        }
    }
});
Run Code Online (Sandbox Code Playgroud)

Tom*_*cki 7

Angular 1.3 input对IE浏览器的事件有某种破解.请分析$SnifferProvider.hasEvent功能.此函数在inputDirective中使用,以保证不支持input事件的浏览器的viewValue正确.解决方法基于keydown广泛支持的事件.

修复IE简单keydown事件转换的代码示例以禁用所有触发器.

link: function(scope, elem, attrs, ngModel){
        elem.off('input');
        elem.off('change');
        elem.off('keydown');
        ...
Run Code Online (Sandbox Code Playgroud)