当从datepicker中选择日期时,它显示$apply
正在进行中,并且控制台显示错误,如
错误:[$ rootScope:inprog] $申请已在进行中
我使用的指令是:
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);
}
}
答案 0 :(得分:0)
而不是范围。$ apply使用$ timeout。更多信息可以在https://stackoverflow.com/a/17958847/1324935
找到答案 1 :(得分:0)
使用安全申请。
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);
}
};