Как установить значение FormControl перед отправкой формы на сервер

Ниже у меня есть группа переключателей, которые показывают/скрывают текстовое поле.

If rdo1 is selected, show the textbox.

If rdo2 is selected, hide the textbox.

Это делается в моем методе updateShowTxtOtherCompanyName() ниже.

Вот моя проблема:

В настоящее время пользователь может ввести текст в текстовое поле, а затем выбрать rdo2. В этом случае текстовое поле скрыто, как и ожидалось. Но когда пользователь отправляет форму сейчас, значение в текстовом поле будет отправлено на сервер, а не нулевое значение.

Мой вопрос: как мне установить значение моего текстового поля равным нулю внутри моего метода updateShowTxtOtherCompanyName()? т.е. если пользователь выбирает rdo2, то значение ДругоеНазваниеКомпании должно быть нулевым

Я скрываю текстовое поле с помощью этого кода:

<radio-button-wrapper formControlName = "damageReported" name = "damageReported">
    <radio heading = "Yes" value = "Yes" data-orientation = "inline" cid = "damageReportedYes" name = "damageReportedYes" (click) = "updateShowTxtOtherCompanyName('show')">
    </radio>
    <radio heading = "No" value = "No" data-orientation = "inline" cid = "damageReportedNo" name = "damageReportedNo"(click) = "updateShowTxtOtherCompanyName('hide')">
    </radio>
</radio-button-wrapper>

<div *ngIf = "showTxtOtherCompanyName ">
    <input formControlName = "otherCompanyName" id = "otherCompanyName" type = "text" [required] = "showSelfRiskAmount === true" />
</div>

.тс

updateShowTxtOtherCompanyName(show: string): void {
    if (show === 'show') {
        this.showTxtOtherCompanyName = true;
    } else {
        this.showTxtOtherCompanyName = false;
        // TODO: need to set otherCompanyName to null here
    }
}
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Angular и React для вашего проекта веб-разработки?
Angular и React для вашего проекта веб-разработки?
Когда дело доходит до веб-разработки, выбор правильного front-end фреймворка имеет решающее значение. Angular и React - два самых популярных...
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Мы провели Twitter Space, обсудив несколько проблем, связанных с последними дополнениями в Angular. Также прошла Angular Tiny Conf с 25 докладами.
Угловой продивер
Угловой продивер
Оригинал этой статьи на турецком языке. ChatGPT используется только для перевода на английский язык.
Мое недавнее углубление в Angular
Мое недавнее углубление в Angular
Недавно я провел некоторое время, изучая фреймворк Angular, и я хотел поделиться своим опытом со всеми вами. Как человек, который любит глубоко...
Освоение Observables и Subjects в Rxjs:
Освоение Observables и Subjects в Rxjs:
Давайте начнем с основ и постепенно перейдем к более продвинутым концепциям в RxJS в Angular
0
0
45
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Просто отключите его.

<div [show] = "showTxtOtherCompanyName ">
    <input formControlName = "otherCompanyName" id = "otherCompanyName" type = "text" [required] = "showSelfRiskAmount === true" [disabled] = "showTxtOtherCompanyName " />
</div>

Отключенные поля не будут возвращены свойством myForm.value. Если вы хотите их, вам придется использовать myForm.getRawValue().

Документация

Stackblitz

Если я использую .getRawValue(), будут ли отключенные поля публиковать нулевой?

user9847788 10.04.2019 12:03

Я добавил [disabled] = "showTxtOtherCompanyName, как показано выше, но он по-прежнему работает так же, как и предыдущий. OtherCompanyName все еще публикуется

user9847788 10.04.2019 12:33

@user9847788 user9847788 действительно, вы должны сделать это в TS, забыл эту часть. Проверьте это в действии !

user4676340 10.04.2019 12:51

Используйте setValue(), как показано ниже -

updateShowTxtOtherCompanyName(show: string): void {
    if (show === 'show') {
        this.showTxtOtherCompanyName = true;
    } else {
        this.showTxtOtherCompanyName = false;
        // TODO: need to set otherCompanyName to null here
        this.otherCompanyName.setValue(null);
    }
}

Спасибо за Ваш ответ. Вот где я объявляю otherCompanyName: ngOnInit() { this.damageDetailsTwoForm = this.fb.group({ injuryType: new FormControl('Bumps, scratches & damage', Validators.required), damageReported: new FormControl('Yes', Validators.required), otherCompanyName: new FormControl(), }); }

user9847788 10.04.2019 11:55

Я использовал ваш код вот так this.damageDetailsTwoForm.controls['otherCompanyName'].setVa‌​lue(null);, но это не решило проблему. Он все еще публикует значение

user9847788 10.04.2019 12:02

Попробуйте так: this.damageDetailsTwoForm.controls.otherCompanyName.setValue‌​(null);

Harun Or Rashid 10.04.2019 12:09

Другие вопросы по теме