Ответ 1
Создается пользовательский элемент управления вводами, поэтому вы можете также поддерживать ng-model
- это правильная вещь.
И, валидаторы - встроенные и настраиваемые - только require: "ngModel"
для своей функции, и они независимы (по дизайну) от базовой реализации DOM, поэтому ng-model
автоматически поддерживает все валидаторы на основе ng-model
.
Поддержка ng-model
также заставит вашу директиву участвовать в валидации form
.
Поскольку вы используете существующую директиву внутри шаблона (т.е. <input>
), вам даже не нужно беспокоиться о DOM, так как вы бы создали что-то с нуля.
app.directive("editor", function(){
return {
require: "?ngModel",
scope: true,
template: "<input ng-model='value' ng-change='onChange()'>",
link: function(scope, element, attrs, ngModel){
if (!ngModel) return;
scope.onChange = function(){
ngModel.$setViewValue(scope.value);
};
ngModel.$render = function(){
scope.value = ngModel.$modelValue;
};
}
};
});
Затем вы можете просто применить валидаторы напрямую:
<editor ng-model="foo" minlength="3"></editor>