Javascript 从datepicker选择日期时,显示$apply已在进行中
当从datepicker中选择date时,显示$apply已在进行中,控制台显示错误,如 错误:[$rootScope:inprog]$apply已在进行中 我使用的指令是:Javascript 从datepicker选择日期时,显示$apply已在进行中,javascript,angularjs,Javascript,Angularjs,当从datepicker中选择date时,显示$apply已在进行中,控制台显示错误,如 错误:[$rootScope:inprog]$apply已在进行中 我使用的指令是: enter code here focus: function (e) { scope.$apply(function () { scope.PresentDateOpened = true; }); }, change: function (e) { scope.$apply(
enter code here
focus: function (e) {
scope.$apply(function () {
scope.PresentDateOpened = true;
});
},
change: function (e) {
scope.$apply(function () {
if (element.val() == "") {
ngModel.$setValidity('validDate', true);
}
});
},
blur: function (e) {
if (element.val() != "") {
scope.$apply(function () {
var data = element.val().toString().split('-');
if (data.length == 3) {
var month = new Date(data[2], data[1], data[0]).getMonth();
var day = new Date(data[2], data[1], data[0]).getDate();
var year = new Date(data[2], data[1], data[0]).getFullYear();
if (!isNaN(month) && !isNaN(day) && !isNaN(year)) {
if (angular.isDate(new Date(day, month, year))) {
ngModel.$setValidity('validDate', true);
ngModel.$setViewValue(new Date(data[2], data[1] - 1, data[0]), 'dd-MMM-yyyy');
ngModel.$render();
}
else {
ngModel.$setValidity('validDate', false);
}
}
而不是作用域。$apply使用$timeout。更多信息可在此处找到使用安全应用
scope.safeApply(function() {
var data = element.val().toString().split('-');
if (data.length == 3) {
var month = new Date(data[2], data[1], data[0]).getMonth();
var day = new Date(data[2], data[1], data[0]).getDate();
var year = new Date(data[2], data[1], data[0]).getFullYear();
if (!isNaN(month) && !isNaN(day) && !isNaN(year)) {
if (angular.isDate(new Date(day, month, year))) {
ngModel.$setValidity('validDate', true);
ngModel.$setViewValue(new Date(data[2], data[1] - 1, data[0]), 'dd-MMM-yyyy');
ngModel.$render();
} else {
ngModel.$setValidity('validDate', false);
}
}
});
scope.safeApply = function(fn) {
var phase = this.$root.$$phase;
if(phase == '$apply' || phase == '$digest') {
if(fn && (typeof(fn) === 'function')) {
fn();
}
} else {
this.$apply(fn);
}
};
但当在datepicker中单击时,它显示UncaughtTypeError:$timeout不是一个函数$timeout是一个标准服务。在使用它之前需要先注入它。$timeoutfunction{}等于setTimeoutscope。$applyfunction{}。由于角度摘要循环的内部结构,当摘要循环进行时,不应该调用apply。您需要将其推迟到下一个事件循环周期,这就是setTimeout所做的。如果此答案解决了您的问题,请接受此答案。请参阅第二点。另外,您不应该在应用程序中使用$$phase,因为它是一个私有变量。是的,我们确实不需要在代码中使用它们,但是这些补丁可以帮助我们执行一些任务,比如一些技巧。请看这里