Я создал компонент для средства выбора даты, который я хочу использовать во многих других компонентах своего приложения. У меня есть некоторые проблемы, потому что это не меняет значение родительского элемента управления группы форм.
Позволяет получить код:
export class DatePickerComponent {
@ViewChild('input', {read: ElementRef, static: false}) inputRef: ElementRef;
@Input()
formName?: FormGroup;
@Input()
formControlName: any;
constructor() {
this.formControlName.setValue(['']);
}
onKeyPress = (event) => {
const pressedKey = event.keyCode;
if (
pressedKey !== 8 &&
pressedKey !== 9 &&
pressedKey !== 13 &&
((pressedKey < 48 || pressedKey > 105) || (pressedKey > 57 && pressedKey < 96))
) {
event.preventDefault();
}
}
onKeyUp = (event) => {
const pressedKey = event.keyCode;
const inputString: string = this.formControlName.value;
if (!inputString) {
return;
}
if (inputString.length === 11) {
this.inputRef.nativeElement.value = inputString.slice(0, -1);
return;
}
if (pressedKey === 8 && (inputString.length === 3 || inputString.length === 6)) {
const newValue = inputString.slice(0, -1);
this.formControlName.setValue(newValue);
this.inputRef.nativeElement.value = newValue;
} else if (inputString.length === 2 || inputString.length === 5) {
const newValue = inputString + '/';
this.formControlName.setValue(newValue);
this.inputRef.nativeElement.value = newValue;
}
}
}
И шаблон:
<div [formGroup]="formName">
<input
class="form-control"
formControlName="{{formControlName}}"
placeholder="DD/MM/YYYY"
name="dp"
ngbDatepicker
#d="ngbDatepicker"
[minDate]="{year: 1930, month: 1, day: 1}"
(click)="d.toggle()"
(keydown)="onKeyPress($event)"
(keyup)="onKeyUp($event)">
</div>
Таким образом, я хотел использовать его в родительском компоненте, который имеет форму с FormGroup
свойством, установленным в X. Чтобы использовать мой компонент, я добавил <app-date-picker [formControlName]="birthDate" [formName]="registerForm"></app-date-picker>
Возможно, я что-то не так сделал в родительском компоненте:
export class UserFormComponent implements OnInit {
@Input() isRegisterPage: boolean;
@Input() isProfilePage: boolean;
@Input() user: UserInfo;
registerForm: FormGroup;
birthDate: FormControl;
loading: boolean;
.e
.t
.c
Как правильно использовать мой указатель даты? Может быть, Сомоне может мне помочь?
Скрипка только с указателем даты (не используется в родительской форме): https://stackblitz.com/edit/angular-i47zuz-jj5glk?file=app/datepicker-popup.ts