Здравствуйте. Итак, у меня есть приложение angular 2. На моей странице регистрации у меня есть адрес для выставления счетов и доставки. При загрузке (ngOninit) форма доставки скрыта, адрес доставки будет отображаться только в том случае, если установлен флажок и скопированы значения (setValue) из фактуры. это означает, что наш клиент хочет другой адрес. Отсюда адрес доставки открывается / показывается и флажок снят. Теперь для меня странно то, что когда пользовательский ввод недействителен, скажем, электронное письмо и пытается отправить его, он обновляет форму и копирует значение из выставления счета, клиент теперь снова вводит адрес доставки.
вот фрагмент ts file:
ngOnInit() {
this.checkBoxDynamicValidator();
}
onSubmit(event: Event) {
event.preventDefault();
}
/**
* this function sets up the validation for the shipping address
* validation is controlled by the checkbox
*/
private checkBoxDynamicValidator(): void {
const changesCheckBox$ = this.companySignUpForm.get('checkBoxBilling')
.valueChanges;
const shipAddressAttrCtrl = this.companySignUpForm.get(
'ship_address_attributes'
) as FormGroup;
changesCheckBox$.subscribe((valOfCheckBox) => {
this.populateShippingAddress(valOfCheckBox);
if (valOfCheckBox) {
this.clearCustomValidators(shipAddressAttrCtrl);
} else {
this.setCustomValidators(shipAddressAttrCtrl);
}
});
}
/**
* populate shipping address if checkbox "same as billing" is unchecked
*/
private populateShippingAddress(isChecked: boolean): void {
const shipAddGroup = this.companySignUpForm.get('ship_address_attributes');
const billAddGroup = this.companySignUpForm.get('bill_address_attributes');
// TODO: move to a helpers
const selectedCountry = this.countries.find( country => Number(country.id) === Number(billAddGroup.value.country_id));
this.setShippingState(selectedCountry.states);
if (!isChecked) {
shipAddGroup.setValue({
firstname: billAddGroup.value.firstname,
lastname: billAddGroup.value.lastname,
address1: billAddGroup.value.address1,
address2: billAddGroup.value.address2,
city: billAddGroup.value.city,
zipcode: billAddGroup.value.zipcode,
phone: billAddGroup.value.phone,
country_id: billAddGroup.value.country_id,
state_id: billAddGroup.value.state_id
});
}
}
changesCheckBox$.subscribe((valOfCheckBox) => {}
этот код срабатывает каждый раз, когда на странице появляется ошибка или после отправки недействительной формы, даже если установленный флажок не нажат или не изменен. я могу предотвратить дефолт здесь? Я сделал предотвращение по умолчанию на отправке ничего не работает.
html фрагмент:
<form novalidate [formGroup]="companySignUpForm">
... html here
<button[disabled]="companySignUpForm.pristine ||companySignUpForm.invalid ||companySignUpForm.get('billingType').value !== 'creditCard'"
(click)="onSubmit($event)">
{{ 'register' | translate }}
</button>
</form>
Есть идеи? Я чувствую, что это ошибка или что-то в этом роде. Хотя я не уверен, но это странное поведение. Я знаю, что valueChanges
формирует Abstract Control, но я на самом деле не нажимаю и не нажимаю флажок. это действительно странно.
Кстати: форма «обновляется», а не страница.