Я создал пользовательскую директиву в AngularJS. Директива использует изолированную область видимости и каким-то образом предотвращает привязку стандартной ngModel к тому же элементу. Я хочу создать поле подтверждения пароля (текст для удобочитаемости в примере).
<input type="text" name="one" ng-model="fields.field_one">
<input type="text" validate-match="fields.field_one" name="two" ng-model="field_two">
Моя директива аннулирует поле, если совпадения нет.
app.directive('validateMatch', function() {
return {
require: 'ngModel',
scope: { matchValue: '=validateMatch' },
link: function(scope, elm, attr, ctrl) {
scope.$watch('matchValue', function(value) {
ctrl.$setValidity('match',
ctrl.$viewValue === value
|| !ctrl.$viewValue && !value);
});
function validate(value) {
ctrl.$setValidity('match', value === scope.matchValue);
return value;
}
ctrl.$parsers.push(validate);
ctrl.$formatters.push(validate);
}
}
});
Дело в том, почему я не могу изменить значение этого поля, изменив модель? Первое поле работает нормально.
Посмотрите plunker, чтобы узнать подробности и прокомментировать код.