我的目标:
我正在尝试构建一个带有清除按钮的可重复使用的 mat-form-field。
我如何尝试实现我的目标:
我创建了一个“mat-clearable-input”组件并像这样使用它:
<mat-clearable-input>
<mat-label>Put a Number here pls</mat-label>
<input matInput formControlName="number_form_control">
</mat-clearable-input>
mat-clearable-input.component.html
<mat-form-field>
<ng-content></ng-content>
</mat-form-field>
预期结果:
ng-content 标签获取标签和输入并将它们放入 mat-form-field 标签中。
实际结果:
Error: mat-form-field must contain a MatFormFieldControl.
at getMatFormFieldMissingControlError (form-field.js:226)
at MatFormField._validateControlChild (form-field.js:688)
at MatFormField.ngAfterContentChecked (form-field.js:558)
at callHook (core.js:2926)
at callHooks (core.js:2892)
at executeInitAndCheckHooks (core.js:2844)
at refreshView (core.js:7239)
at refreshComponent (core.js:8335)
at refreshChildComponents (core.js:6991)
at refreshView (core.js:7248)
看起来我遗漏了一些东西而且我没有正确使用 ng-content 标签。
我无法在 angular 网站上找到 ng-content 标签的文档。
感谢您的任何帮助。
在下面回答后编辑
所以我尝试了这个建议的方法:
export class MatClearableInputComponent implements OnInit {
@ContentChild(MatFormFieldControl) _control: MatFormFieldControl<any>;
@ViewChild(MatFormField) _matFormField: MatFormField;
// see https://stackoverflow.com/questions/63898533/angular-ng-content-not-working-with-mat-form-field/
ngOnInit() {
this._matFormField._control = this._control;
}
}
不幸的是,当我尝试在表单中使用它时,它仍然失败并出现错误“错误:mat-form-field 必须包含 MatFormFieldControl”。
我尝试以某种形式使用此组件的代码:
<mat-clearable-input>
<mat-label>Numero incarico</mat-label>
<buffered-input matInput formControlName="numero"></buffered-input>
</mat-clearable-input>
在 stackblitz 上重现:https://stackblitz.com/edit/angular-material-starter-xypjc5 ?file=app/clearable-form-field/clearable-form-field.component.html
请注意 mat-form-field 功能如何不起作用(没有轮廓,没有浮动标签),同时打开控制台,您将看到错误错误:mat-form-field 必须包含 MatFormFieldControl。
选项 2 发布后编辑
我试过这样做:
<mat-form-field>
<input matInput hidden>
<ng-content></ng-content>
</mat-form-field>
它有效,但是当我在我的表单字段中添加一个 mat-label 时,如下所示:
繁星点点滴滴
红颜莎娜
千万里不及你
相关分类