Как установить форму как первозданную?
- Форма, представляющая состояние объекта, редактируется (становится грязной)
- Форма отправляется, и состояние объекта теперь выровнено с состоянием формы, что означает, что форма теперь должна быть установлена как нетронутая.
Как мы это делаем?
В ng1 было $setPristine()
.
Кстати, я говорю о типе формы ControlGroup
.
Ответы
Ответ 1
Существует метод markAsPristine
(сейчас он недокументирован, но его можно найти здесь: https://github.com/angular/angular/blob/53f0c2206df6a5f8ee03d611a7563ca1a78cc82d/tools/public_api_guard/forms/index.d.ts#L42).
В принципе, this.form.markAsPristine()
делает то, что вы ожидаете.
Ответ 2
Обновление
В модуле новых форм это значительно улучшилось.
AbstractControl
, базовый класс большинства классов форм обеспечивает
markAsTouched({onlySelf}?: {onlySelf?: boolean}) : void
markAsUntouched({onlySelf}?: {onlySelf?: boolean}) : void
markAsDirty({onlySelf}?: {onlySelf?: boolean}) : void
markAsPristine({onlySelf}?: {onlySelf?: boolean}) : void
markAsPending({onlySelf}?: {onlySelf?: boolean}) : void
И еще несколько новых методов
disable({onlySelf, emitEvent}?: {onlySelf?: boolean, emitEvent?: boolean}) : void
enable({onlySelf, emitEvent}?: {onlySelf?: boolean, emitEvent?: boolean}) : void
setValue(value: any, options?: Object) : void
patchValue(value: any, options?: Object) : void
reset(value?: any, options?: Object) : void
updateValueAndValidity({onlySelf, emitEvent}?: {onlySelf?: boolean, emitEvent?: boolean}) : void // (old)
setErrors(errors: {[key: string]: any}, {emitEvent}?: {emitEvent?: boolean}) : void
оригинальный
В настоящее время это не поддерживается. См. https://github.com/angular/angular/issues/5568 и https://github.com/angular/angular/issues/4933. Обычное обходное решение состоит в том, чтобы заново создать форму, чтобы получить первозданный.
Ответ 3
class MyComp {
form = new FormGroup({
first: new FormControl('Nancy'),
last: new FormControl('Drew')
});
}
reset() {
this.form.reset(); // will reset to null
// this.form.reset({first: 'Nancy', last: 'Drew'}); -- will reset to value specified
}
https://github.com/angular/angular/pull/9974
Это будет отображаться в rc5 или новее.