ngModel 在 Internet Explorer 中未正确更新 - AngularJS 1.3
ngModel is not correctly updated in Internet Explorer - AngularJS 1.3
你好,我有一个奇怪的问题,它只出现在 angular 1.3 的 IE 11 中。
我有一个指令允许我将 Object
存储为 input
元素的 ngModel
值。它在 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();
});
当我在 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();
});
}
}
});
Angular 1.3 对 IE 浏览器的 input
事件有某种破解。请分析$SnifferProvider.hasEvent
函数。此函数在 inputDirective 中使用,以保证不支持 input
事件的浏览器的正确 viewValue。解决方法基于广泛支持的 keydown
事件。
修复 IE 的代码示例,只需关闭 keydown
事件即可禁用所有触发器。
link: function(scope, elem, attrs, ngModel){
elem.off('input');
elem.off('change');
elem.off('keydown');
...
你好,我有一个奇怪的问题,它只出现在 angular 1.3 的 IE 11 中。
我有一个指令允许我将 Object
存储为 input
元素的 ngModel
值。它在 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();
});
当我在 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();
});
}
}
});
Angular 1.3 对 IE 浏览器的 input
事件有某种破解。请分析$SnifferProvider.hasEvent
函数。此函数在 inputDirective 中使用,以保证不支持 input
事件的浏览器的正确 viewValue。解决方法基于广泛支持的 keydown
事件。
修复 IE 的代码示例,只需关闭 keydown
事件即可禁用所有触发器。
link: function(scope, elem, attrs, ngModel){
elem.off('input');
elem.off('change');
elem.off('keydown');
...