У меня есть небольшое веб-приложение с Angular 5, и внезапно я получаю это странное сообщение об ошибке в моей консоли браузера:
ncaught Error: Template parse errors:
No provider for ControlContainer ("
</p>
<form class="container" (ngSubmit)="update()">
[ERROR ->]<app-form-group-component
[formGroup]="additionalInformation"></app-form-group-component>
<button "): ng:///AppModule/[email protected]:2
Этого не произошло раньше, и я не знаю никаких изменений. И я понятия не имею, что это сообщение пытается мне рассказать.
Это компонентный шаблон формы-группы, который, как представляется, некорректен:
<div *ngFor='let e of formGroup' class="form-group">
<label for="{{e.key}}">{{e.label}}</label>
<input type="{{e.type}}" name="{{e.key}}"
[(ngModel)]="e.value" class="form-control"
[ngClass]='{"is-valid": e.valid === true && e.required === true}'
/>
</div>
И это шаблон, в котором я использую форму-группу:
<form class="container" (ngSubmit)="update()">
<app-form-group-component [formGroup]="additionalInformation"></app-form-group-component>
<button type="submit" class="btn btn-primary">Submit</button>
</form>
<app-notification [notification]="notification"></app-notification>
Я смотрел на него часами, но я не могу найти никакой ошибки.
Я должен упомянуть, что я не использую Angular FormGroup, но мое собственное решение (потому что я думал, что их надо переусердствовать, и это не соответствовало моим конкретным потребностям). Может ли быть какое-то столкновение имен? Конечно, в app.module я импортировал FormsModule для двусторонней привязки для работы и перехвата формы submit. Компонент уведомления, по крайней мере, работает без жалоб.
Я был бы очень благодарен за любую помощь.
Изменить: меня попросили поделиться своим TS-кодом.
Неудачный компонент:
import { Component, Input } from '@angular/core';
import { FormGroup } from '../../models/form-group';
@Component({
selector: 'app-form-group-component',
templateUrl: './form-group.component.html',
})
export class FormGroupComponent {
@Input() formGroup?: FormGroup
}
Тип FormGroup - это просто массив, а компонент - визуальная оболочка. Нет никаких дополнительных услуг или DI и без этого компонента Угловые компиляции просто прекрасны. (formGroup помечен как необязательный, поскольку TS будет продолжать жаловаться на то, что он не инициализируется, хотя во время выполнения он всегда будет инициализирован)
Компонент, который передает собственность:
import { Component, OnInit } from "@angular/core";
import { additionalInformation } from "./additional-information";
import { basicInformation } from "./basic-information";
...
@Component({
selector: "app-kickoff",
templateUrl: "./kickoff.component.html",
})
export class KickoffComponent implements OnInit {
basicInformation: FormGroup = basicInformation;
additionalInformation: FormGroup = additionalInformation;
methods...
}
Изменить: ответить на вопрос @Andrei: у меня нет сервиса или провайдера под названием ControlContainer. У меня всего три небольших службы, ни одна из них не вызывает никаких проблем. Насколько я могу судить, ControlContainer имеет какое-то отношение к DI, но угловая документация по этой теме довольно мистифицирует.