Как установить валидацию поля ввода в пользовательской директиве многократного использования?
Я пытаюсь сделать многоразовую пользовательскую директиву, которая будет проверять дату в поле ввода. Код, приведенный ниже, работает, однако его нельзя использовать повторно, и это меня больше всего беспокоит. Я пытался установить новую область видимости в директиве, однако я получил ошибку:
Несколько директив, запрашивающих изолированную область видимости.
Таким образом, я думаю, что изолированные рамки не помогут мне.
Любые другие решения?
Это мой первый шаблон:
<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;
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
}
}
};
});
Его можно использовать в обоих путях формы, поэтому здесь нет необходимости в этой логике. Чтобы узнать больше об этом, это один хороший ресурс