在从日期选择器中选择日期时,显示$apply已经在进行中



当从日期选择器中选择日期时,显示$apply已在进行中,控制台显示错误

错误:[$rootScope:inprog] $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 use $timeout更多信息请访问https://stackoverflow.com/a/17958847/1324935

use safe apply。

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);
  }
};

最新更新