Нет ошибки доступа к значению при использовании mat-slide-toggle
Я использую угловые реактивные формы, группа форм инициализируется в родительском компоненте, а элементы управления формой находятся в дочерних компонентах.
Проблема в том, что при доступе к странице я получаю следующее сообщение об ошибке:
ERROR Error: No value accessor for form control with unspecified name attribute
В целях тестирования я попытался заменитьmat-slide-toggle
с чекбоксом ввода и ошибка уходит, почему ругается с ползунком, не могу понять.
Вот аналогичный пример:
Родительский модуль
@NgModule({
...
declarations: [ParentComponent],
imports: [
...,
MatSlideToggleModule,
]
})
export class ParentModule {}
Родительский компонент
@Component({
selector: 'app-parent',
template: `
<form [formGroup]="myFormGroup">
<app-child-a [subscribedControl]="$any(myFormGroup.controls.myOption)"></app-child-a>
</form>
`
})
export class ParentComponent {
public myFormGroup: FormGroup = this._fb.group({
myOption: [true, [Validators.required]],
});
constructor(private _fb: FormBuilder) {}
}
Дочерний компонент
@Component({
selector: 'app-child-a',
template: `
<mat-slide-toggle [formControl]="subscribedControl"></mat-slide-toggle>
`
})
export class ChildAComponent {
@Input() public subscribedControl!: FormControl;
}
Есть идеи?
1 ответ
Основываясь на том, что вы предоставили, и принимая во внимание, что это не исходный фрагмент, вот несколько вещей, которые нужно проверить:
- Вы объявляете свой дочерний компонент в своем
? Или вы импортируете соответствующий модуль, который его содержит? Потому что в предоставленном фрагменте вы этого не сделаете. (Это, вероятно, вызовет другую ошибку) - Вы используете «зарезервированное» имя
как имя входного свойства вашего ребенка? Если да, то меняй на что-то другое. Например .
С другой стороны, передача самого элемента управления формой не является элегантным решением.
Если вы хотите использовать свой
Таким образом, вы в основном говорите Angular: «Посмотрите, мой пользовательский элемент управления следует правилам, которым следует любой другой нативный элемент формы. Так что вы можете использовать его в форме».
Если вы реализуете этот интерфейс и предоставляете свой компонент как CVA, вам не нужно передавать управление формой.
Вы можете прочитать подробное объяснение в этой статье .
В качестве альтернативы, если вам просто нужно разбить форму на компоненты подчиненной формы и не заботиться о возможности повторного использования и переносимости, вы можете использовать этот подход .