Angularjs 使用orderBy filter和updateOn Blur时角度数输入自动递增
我正在处理一个使用角度的视图,我注意到如果执行某个动作序列,在Angularjs 使用orderBy filter和updateOn Blur时角度数输入自动递增,angularjs,Angularjs,我正在处理一个使用角度的视图,我注意到如果执行某个动作序列,在ng repeat中输入的数字将自动递增 当以下情况为真时,会发生这种情况: 使用角度1.3及以上(未在角度2上测试) ng repeat使用orderBy 数字输入使用ng model options=“{updateOn:'blur'}” 更新:这些微调器控件是webkit的一部分,仅出现在webkit浏览器(如Chrome)中。IE和Edge不是webkit浏览器,不会显示微调器控件。 如果我使用angular 1.2,或者
ng repeat
中输入的数字将自动递增
当以下情况为真时,会发生这种情况:
- 使用角度1.3及以上(未在角度2上测试)
使用ng repeat
orderBy
- 数字输入使用
ng model options=“{updateOn:'blur'}”
orderBy
或updateOn:“blur”
则问题不会出现
我知道我可以通过删除这两个功能中的任何一个来修复它,但我并不完全理解为什么会发生这种情况
有人能解释为什么数字输入自动递增吗?
有关重现问题的步骤,请参见下面的示例
var myApp=angular.module('myApp',[]);
myApp.controller('myController',函数myController($scope){
$scope.items=[{
'Name':'Item1',
“Seq”:0
}, {
'Name':'Item2',
“Seq”:0
}];
});代码>
复制步骤:
将鼠标悬停在项目1的序列输入上,然后按一次向上箭头
将鼠标悬停在项目2的序列输入上,然后按一次向上箭头
序列号现在将持续递增
序号#
序号
项目#
{{item.Seq}
{{item.Name}
我不确定您将如何解决这个问题,但这肯定是HTML数字微调器操作的一个怪癖。增加第一个微调器时,orderBy
不会立即触发,因为输入框没有失去焦点。当你鼠标向下
第二个微调器时,它会立即触发焦点更改,从而触发orderBy
,这会导致输入框在处理鼠标向下
之前移动到相反的位置,导致微调器的动作就像你按住鼠标一样。对我来说,序列号不会增加,正如预期的那样,当我将焦点移出第一个单元格时,表格会重新排序。因此,如果您单击第二个单元格的“向上”箭头,您将获得数字2@jimmious,您使用的浏览器是什么?我刚刚在edge和IE中进行了测试,没有看到向上/向下按钮,因此无法在这些应用程序中重现该问题。我会更新这个问题,以表明这个问题目前在我的chrome中。我相信我现在明白了,它可能正在按设计工作。由于上/下箭头可以保持递增,因此它们使用mousedown/mouseup事件而不是单击。由于“模糊”,模型在焦点丢失之前不会更新,此时会进行排序。因此,当您单击第二个输入上的向上箭头时,它会注册mousedown事件,然后第一个输入模型更新,ng repeat应用orderBy,现在控件不再位于鼠标下,因此它不会注册mouseup事件。我认为问题的核心是,orderBy
重新绘制DOM,我不确定你将如何解决这个问题,但这绝对是HTML数字微调器操作的一个怪癖。增加第一个微调器时,orderBy
不会立即触发,因为输入框没有失去焦点。当你鼠标向下
第二个微调器时,它会立即触发焦点更改,从而触发orderBy
,这会导致输入框在处理鼠标向下
之前移动到相反的位置,导致微调器的动作就像你按住鼠标一样。对我来说,序列号不会增加,正如预期的那样,当我将焦点移出第一个单元格时,表格会重新排序。因此,如果您单击第二个单元格的“向上”箭头,您将获得数字2@jimmious,您使用的浏览器是什么?我刚刚在edge和IE中进行了测试,没有看到向上/向下按钮,因此无法在这些应用程序中重现该问题。我会更新这个问题,以表明这个问题目前在我的chrome中。我相信我现在明白了,它可能正在按设计工作。由于上/下箭头可以保持递增,因此它们使用mousedown/mouseup事件而不是单击。由于“模糊”,模型在焦点丢失之前不会更新,此时会进行排序。因此,当您单击第二个输入上的向上箭头时,它会注册一个mousedown事件,然后第一个输入模型更新,ng repeat应用orderBy,现在控件不再位于鼠标下,因此它不会注册mouseup事件。我认为问题的核心是,orderBy
重新绘制DOM,这会混淆微调器。