检测ng-model变为指令

Lea*_*xxx 1 validation angularjs angularjs-directive

我正在做一个自定义验证(指令)比较两个日期,如果start_date大于end_date则显示错误...我正在通过ng-model传递start_date

ng-model="start_date"
Run Code Online (Sandbox Code Playgroud)

和end_date一起使用我的指令:

lower-than-date="{{end_date.toISOString()}}" //ignore the toISOString()
Run Code Online (Sandbox Code Playgroud)

我正在使用我的指令的输入...

<input type="text" ng-model="start_date"
datepicker-popup="yyyy-MM-dd" min="today" show-weeks="false"
lower-than-date="{{end_date.toISOString()}}"/>
Run Code Online (Sandbox Code Playgroud)

指令......

.directive("lowerThanDate", ['$parse', function($parse) {
    return {
        require: 'ngModel',

        link: function (scope, element, attrs, ctrl) {

            var lowerThan = null;
            function revalidate(_val) {
                var valid = _val && lowerThan ? _val < lowerThan : true;
                ctrl.$setValidity('lowerThanDate', valid);
            }

            attrs.$observe('lowerThanDate', function(_value) {
                //Here I'm detecting when end_date change
                lowerThan = new Date(_value);
                revalidate(ctrl.$modelValue);
            });

            ctrl.$parsers.unshift(function(_value) {
                revalidate(_value);
                return _value;
            });
        }
    };
}])
Run Code Online (Sandbox Code Playgroud)

此代码工作正常,但只有在我更改end_date时才会触发验证.我想验证何时更改start_date.

因此,问题是:如何在start_date更改时"观察"ng-model值以触发验证.

注意:这是比较日期的通用指令.牢记这一点.

the*_*met 5

设置绑定到ngModel链接功能内部:

var modelValue = $parse(attr.ngModel);

scope.$watch(modelValue, function(value) {
  // validate value against endDate.
});
Run Code Online (Sandbox Code Playgroud)