我试图制作一个可重复使用的自定义指令,它将在输入字段中验证日期。下面提供的代码是可行的,但是根本不可重用,这是我最关心的问题。 我试图做的是在指令中设置一个新范围但是我收到了一个错误:
请求隔离范围的多个指令。
所以我猜孤立的范围不会对我有帮助。
还有其他解决方案吗?
这是我的第一个模板:
<form ng-submit="add()" name="addTask" class="form-horizontal">
<input name="dateInput" is-date-valid type="text" class="form-control" ng-model="task.DueDate" datepicker-options="datepicker.options" ng-model-options="{ timezone: 'UTC' }" uib-datepicker-popup="mediumDate" is-open="isOpened" required>
</form>
这是我的第二个模板:
<form ng-submit="edit()" name="editTask" class="form-horizontal">
<input name="dateInput" is-date-valid type="text" class="form-control" ng-model="task.DueDate" datepicker-options="datepicker.options" ng-model-options="{ timezone: 'UTC' }" uib-datepicker-popup="mediumDate" is-open="isOpened" required>
</form>
这是我的自定义指令:
function isDateValid($log) {
'ngInject';
var directive = {
restrict: 'A',
require: 'ngModel',
link: link
};
return directive;
function link(scope, element, attrs, ctrl) {
scope.$watch(attrs.ngModel, function () {
var validation = can_i_get_this_from_controller ?
if (validation) {
ctrl.$setValidity('validation', true);
} else {
ctrl.$setValidity('validation', false);
}
});
}
}
module.exports = isDateValid;
答案 0 :(得分:1)
您实现自定义验证器的方式并不好,您应该做这样的事情 -
.directive('dateValidate', function () {
return {
restrict: 'A',
require: 'ngModel',
link: function (scope, elem, attrs, ngModel) {
ngModel.$validators.dateValidate = function(modelValue) {
//Your logic here, return true if success else false
}
}
};
});
它可以在两个表单路径上使用,因此这里不需要那个逻辑。 要了解有关这些的更多信息,这是一个很好的resource