我有指令ngEnter的输入,如果我按回车,则函数convertAdditionalHoursInHoliday被调用两次 - 只是第一次。如果我再次按Enter键,则只调用一次该函数。 有没有人知道为什么或者我可以阻止这个?
<input type="text" name="additionalHoursInHolidayAmount"
ng-model="institutionUserConnection.scheduleAbsenceHeader.additionalHoursInHoliday"
ng-Enter="vm.convertAdditionalHoursInHoliday(institutionUserConnection)"
ng-class="institutionUserConnection.scheduleAbsenceHeader.errorTimeAdditionalHoursInHoliday ? 'form-control input errorTime' : 'form-control input'"
placeholder="00:00" />
该指令如下所示:
(function() {
'use strict';
angular
.module('aposoft.userschedulemanagement')
.directive('ngEnter', function () {
return function (scope, element, attrs) {
element.bind("keydown keypress", function (event) {
if(event.which === 13) {
scope.$apply(function (){
scope.$eval(attrs.ngEnter);
});
event.preventDefault();
}
});
};
});
})();
答案 0 :(得分:1)
我也有这个问题..无法理解为什么在某些函数中ng-enter按预期工作,而在其他函数中它被调用两次。
必须找到这个问题的快速解决方案,所以我找到了这个选项:
<input ng-keyup="$event.keyCode == 13 && tempFunc()"... />
在你的情况下它看起来像那样:
<input type="text" name="additionalHoursInHolidayAmount"
ng-model="institutionUserConnection.scheduleAbsenceHeader.additionalHoursInHoliday"
ng-keyup="$event.keyCode == 13 && vm.convertAdditionalHoursInHoliday(institutionUserConnection)"
ng-class="institutionUserConnection.scheduleAbsenceHeader.errorTimeAdditionalHoursInHoliday ? 'form-control input errorTime' : 'form-control input'"
placeholder="00:00" />
就我而言,它就像一个魅力......你应该看看它。
如果有任何关于为什么ng-enter指令被调用两次的见解,我也希望得到通知..
希望此解决方案现在有用:)
=============================================== ==
我认为我找到了一个更好的解决方案。
在没有逗号的情况下添加keydown和keypress事件来分隔它们意味着两者都可以同时触发。这可能会产生$ rootScope:inprog错误。在它们之间添加逗号会创建一个析取,并确保只发生$ digest循环。 (发现Ryan Miller在另一篇文章中的评论 - 谢谢Ryan)
所以我们得到的工作指令是(鼓滚):
.directive('ngEnter', function () {
return function (scope, element, attrs) {
element.bind("keydown, keypress", function (event) {
if(event.which === 13) {
scope.$apply(function (){
scope.$eval(attrs.ngEnter);
});
event.preventDefault();
}
});
};
});
我已经在我的代码上检查了它,它就像一个魅力。
干杯。