当前位置: 首页 > 知识库问答 >
问题:

mat表单字段必须包含MatFormFieldControl

殷浩慨
2023-03-14

我们正试图在我们公司建立我们自己的表单-字段-组件。我们试图这样包装材料设计的组成部分:

字段:

<mat-form-field>
    <ng-content></ng-content>
    <mat-hint align="start"><strong>{{hint}}</strong> </mat-hint>
    <mat-hint align="end">{{message.value.length}} / 256</mat-hint>
    <mat-error>This field is required</mat-error>
</mat-form-field>

文本框:

<field hint="hint">
    <input matInput 
    [placeholder]="placeholder" 
    [value]="value"
    (change)="onChange($event)" 
    (keydown)="onKeydown($event)" 
    (keyup)="onKeyup($event)" 
    (keypress)="onKeypress($event)">
</field>

用法:

<textbox value="test" hint="my hint"></textbox>

这大致会导致以下结果:

<textbox  placeholder="Personnummer/samordningsnummer" value="" ng-reflect-placeholder="Personnummer/samordningsnummer">
  <field>
    <mat-form-field class="mat-input-container mat-form-field">
      <div class="mat-input-wrapper mat-form-field-wrapper">
        <div class="mat-input-flex mat-form-field-flex">
          <div class="mat-input-infix mat-form-field-infix">
            <input _ngcontent-c4="" class="mat-input-element mat-form-field-autofill-control" matinput="" ng-reflect-placeholder="Personnummer/samordningsnummer" ng-reflect-value="" id="mat-input-2" placeholder="Personnummer/samordningsnummer" aria-invalid="false">
            <span class="mat-input-placeholder-wrapper mat-form-field-placeholder-wrapper"></span>
          </div>
        </div>
        <div class="mat-input-underline mat-form-field-underline">
          <span class="mat-input-ripple mat-form-field-ripple"></span>
        </div>
        <div class="mat-input-subscript-wrapper mat-form-field-subscript-wrapper"></div>
      </div>
    </mat-form-field>
  </field>
</textbox>

但是我在控制台中得到“mat-form-field必须包含一个MatFormFieldControl”。我想这与不直接包含matInput-field的mat-form-field有关。但它包含它,它只是在ng内容投影中。

这是一场闪电战:https://stackblitz.com/edit/angular-xpvwzf

共有3个答案

金昂熙
2023-03-14

在模块中导入MatInputModule。ts文件,它将解决问题。

import { MatInputModule } from '@angular/material/input';

后面的陈述是老答案。

遗憾的是,还不支持将内容投影到mat表单字段中。请跟踪以下github问题以获取有关它的最新消息。

到目前为止,您唯一的解决方案是将内容直接放入< code>mat-form-field组件,或者实现一个< code>MatFormFieldControl类,从而创建一个自定义的表单域组件。

邓光赫
2023-03-14

MatInputModuleMatFormFieldModule导入模块内部,即

import { MatInputModule } from '@angular/material/input';
import { MatFormFieldModule } from "@angular/material/form-field";

@NgModule({
    imports: [
        MatFormFieldModule,
        MatInputModule
    ]
})
export class AppModule { }

请务必添加 matInput,并且区分大小写。

<mat-form-field>
    <input matInput type="text" />
</mat-form-field>

检查您在输入标签上没有任何条件在任何情况下都是假的,因为mat-form-field在其中查找matIn的。而是将*ngIF放在mat-form-field标签上。

<mat-form-field>
   <input matInput *ngIf="someCondition"> // don't add condition here, else add in mat-form-field tag
</mat-form-field>

感谢@William Herrmann指出了第三个问题

如果angular编译器在修复上述问题后仍然给出错误,那么你必须重新启动应用程序。

ng serve
师野
2023-03-14

我有这个问题。我在主模块中导入了< code>MatFormFieldModule,但是忘记了将< code>MatInputModule添加到< code>imports数组中,如下所示:

import { MatFormFieldModule, MatInputModule } from '@angular/material';

@NgModule({
    imports: [
        MatFormFieldModule,
        MatInputModule
    ]
})
export class AppModule { }

更多信息在这里。

 类似资料:
  • 我正在处理Angular表单,我试图验证一个反应性表单。对于模板,我在项目中使用材料设计, 我在文本框中输入条件ngIf进行验证时出错 错误是-: ERROR错误:mat-form-field必须包含一个MatFormFieldControl。 请看-: 为了消除这个问题,我已经在文件2中导入了module.ts的MatInputMoules。已添加您必须将matInput添加到输入 但还是出现了

  • 我想按照本指南实现一个角度材质自定义表单字段:https://material.angular.io/guide/creating-a-custom-form-field-control 但我一直有这样的错误:错误:mat表单字段必须包含MatFormFieldControl。 根据文件: 如果没有将表单字段控件添加到表单字段,则会出现此错误。如果表单字段包含本机或元素,请确保已向其添加matIn

  • 有人知道如何编写正则表达式模式吗? 假设我有一组字母,比如 还有一个单词Alabama,我希望preg_match返回true,因为它包含两次字母a和B。但是单词Ab应该返回false,因为这个单词中没有两个a。 有什么想法吗? 编辑:我尝试的唯一模式是[a,b,a],但它会在每个包含其中一个字母的单词上返回true,并且不会检查是否出现多个字母

  • 主要内容:PHP - 必需字段,PHP - 显示错误信息本章节我们将介绍如何设置表单必需字段及错误信息。 PHP - 必需字段 在上一章节我们已经介绍了表的验证规则,我们可以看到"名字", "E-mail", 和 "性别" 字段是必需的,各字段不能为空。 字段 验证规则 名字 必需。 + 只能包含字母和空格 E-mail 必需。 + 必需包含一个有效的电子邮件地址(包含"@"和".") 网址 可选。 如果存在,它必需包含一个有效的URL 备注 可选。多

  • null null null 我只是不知道如何将两者结合起来,这样小数点后才是强制性的。 我如何解决这个问题?

  • 问题内容: 我正在尝试基于REST API Ang AngularJS构建应用程序。我一直在关注本教程http://npmasters.com/2012/11/25/Symfony2-Rest- FOSRestBundle.html, 但是必须更改一些详细信息(折旧的方法),现在当我发布创建新实体时, “此表单不应包含其他字段”错误。 我的TaskType表格: 在我看来,现在我只渲染一种形式,但