Нет провайдера для ControlContainer, когда дочерний компонент имеет ngModelGroup
Я не могу понять это, он просто не работает.
Это оригинальный plunker, который написан Паскалем Прехтом, что является объяснением форм, управляемых шаблонами:
И здесь - это моя вилка, которая является точно такой же, за исключением того, что я пытаюсь загрузить один из полей в качестве отдельного дочернего компонента.
Вот код:
@Component({
selector:'form-group-component',
template:`
<fieldset ngModelGroup="anotherAddress">
<div>
<label>Street2:</label>
<input type="text" name="street2" ngModel>
</div>
</fieldset>
`
})
export class FormGroupComponent{
}
@Component({
selector: 'form-component',
directives:[FormGroupComponent],
template: `
<form #form="ngForm">
<form-group-component></form-group-component>
<fieldset ngModelGroup="address">
<div>
<label>Street:</label>
<input type="text" name="street" ngModel>
</div>
<div>
<label>Zip:</label>
<input type="text" name="zip" ngModel>
</div>
<div>
<label>City:</label>
<input type="text" name="city" ngModel>
</div>
</fieldset>
</form>
`
})
export class FormComponent {
}
Итак, после разрезания одного из feildsets и загрузки его внутри отдельной директивы, он больше не будет работать!
Есть несколько закрытых проблем, но не работает.
Это
и Это
Ответы
Ответ 1
Я знаю, это старый вопрос. Но кто-то в будущем может оказаться полезным. У меня была такая же проблема и выглядит так: ошибка появляется, когда компонент имеет тег <form>
без директивы formGroup
и модуль импортирует
ReactiveFormModule
. Поэтому, чтобы исправить проблему, убедитесь, что все теги <form>
имеют директиву formGroup
, если их модуль импортирует ReactiveFormModule
.
Ответ 2
Если вы используете шаблонно-управляемые формы и имеете подкомпонент для части формы и (наконец) хотите использовать ngModelGroup в этом подкомпоненте, вам необходимо предоставить ControlContainer для просмотра.
Быстрое решение:
- импортировать
ControlContainer, NgForm
в подкомпонент:
import { ControlContainer, NgForm } from '@angular/forms';
- добавьте их как
viewProviders
в подкомпонентный декоратор @Component
:
'' '
@Component({
selector: 'sub-question',
templateUrl: '...',
styleUrls: ['...'],
viewProviders: [ { provide: ControlContainer, useExisting: NgForm } ]
})
Ответ 3
Быстрый импорт на app.modules.ts
import { ReactiveFormsModule } from '@angular/forms';
@NgModule({
imports: [
ReactiveFormsModule],})