Моя форма заполняется user.email
. Я хочу включить только кнопку редактирования, если пользователь заполняет поле FormControl
значением, отличным от оригинала user.email
. Можно ли это сделать с помощью специального валидатора?Angular 2 - Подтвердить, что значение формы изменилось со своего значения по умолчанию с помощью настраиваемых валидаторов
Это мой валидатор:
import { FormControl } from '@angular/forms';
export class ChangedValidator {
static isValid(control: FormControl): any {
let initialValue = (' ' + control.value).slice(1);
if(initialValue === control.value){
return {
"changed": true
};
}
return null;
}
}
Намерение клонировать FormControl.value
, но я понимаю, что этот класс конкретизируется каждый раз, когда значение изменяется в FormControl.
Один очень Hacky подход, который пишет unreusable код является извлечение user.email
из данных provider
, что хранит его, и использовать его, чтобы сравнить его с FormControl.value
. Как вы можете догадаться, валидатор будет ТОЛЬКО работать для параметров объекта User
, и ничего больше.
Я хочу написать универсальный Validator
, который проверяет, отличается ли текущее значение формы от значения, которое было инициализировано.
Edit:
Это способ сделать это с pristine
, но она не совершенна.
import { FormControl } from '@angular/forms';
export class ChangedValidator {
static isValid(control: FormControl): any {
if(control.pristine){
return {
"unchanged": true
};
}
return null;
}
}
Если 'pristine' не достаточно хорошо (чеки, если значение изменилось, не изменилось, если она и вернулась к оригиналу), то да, вы могли бы сделать пользовательский валидатор, где вы отправьте начальное значение в качестве параметра. – silentsod
@silentsod 'pristine', вероятно,« достаточно хорош », но если возможно, вы можете показать мне, как отправить его? Я посмотрел на другую нить, но ни один из этих решений не работал для меня, когда я это пробовал. –