Datepicker指令导致infdig(无限摘要循环)错误

时间:2014-07-28 08:09:06

标签: angularjs jquery-ui datepicker

此AngularJS 1.2.21指令用作支持type =" date"的浏览器中使用的通用解决方案。而不是支持它。

directive('datePicker', function(){

        var el = document.createElement('input');
        el.setAttribute('type','date');
        var typeDateSupport = (el.type === 'date');        
        return {
            require: 'ngModel',
            link: function(scope, elm, attrs, ctrl) {
                if (typeDateSupport) {
                    elm.attr('type', 'date');
                    elm.attr('placeholder', null);
                    /* Type date takes care of the right format. The display value is localized, the real value is always YYYY-MM-DD,
                        so that we do not need to add any parsers and formatters */
                } else {
                    elm.attr('type', 'text');
                    elm.attr('readonly', 'readonly');
                    elm.datepicker({
                           dateFormat: 'yy-mm-dd', // TODO: internationalize this
                       onSelect: function(date) {
                          scope.$apply(function() {
                             ctrl.$setViewValue(date);
                          });
                       }
                    });
                    if (attrs.hasOwnProperty('max')) {
                        elm.datepicker('option', 'maxDate', $.datepicker.parseDate('yy-mm-dd', attrs.max));
                    }
                    ctrl.$formatters.unshift(function(value) {
                        if (angular.isUndefined(value)) {
                            return undefined;
                        }
                        return moment.utc(value).tz(Config.timeZone).format('YYYY-MM-DD');
                    });
                    ctrl.$parsers.unshift(function(value) {
                        if (angular.isUndefined(value)) {
                            return undefined;
                        }
                        var tmp = moment.tz(value, Config.timeZone);
                        ctrl.$setValidity('date', tmp.isValid());
                        return tmp.isValid()? tmp : undefined;
                        return value;
                    });

                }

            }
        };
    })

代码导致此错误:IE 11中的 Error: [$rootScope:infdig] (不支持type="date")。我其实不知道,为什么.... 有人可以帮忙吗?

1 个答案:

答案 0 :(得分:1)

取消对scope.$apply的通话。它通常与此类错误有关。