【发布时间】:2018-08-04 04:04:57
【问题描述】:
我有一个带有 Angular 5 的小型 Web 应用程序,突然我在浏览器控制台中收到一条奇怪的错误消息:
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/KickoffComponent.html@4: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 以进行双向绑定以工作并拦截表单的提交。 通知组件至少可以毫无怨言地工作。
如果有任何帮助,我将不胜感激。
编辑: 我被要求分享我的 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,并且没有该组件,Angular 编译得很好。 (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 有关,但 Angular 关于该主题的文档相当神秘。
【问题讨论】:
-
可以分享一下你的ts代码吗?
-
恐怕这里的内容太少,无法理解这个问题。 Angular 抱怨有人请求了一个类型为 ControlContainer 的提供者(服务),而该类型在任何注入器中都找不到。这是您定义的服务吗?它是在哪里注入的?它是什么模块的一部分?它在那里被声明为提供者吗?
-
我认为将您的输入命名为与角度形式指令相同的东西通常是一个坏主意,即使它不会引起冲突。