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

角动力形式与角材料

龙兴学
2023-03-14

我在Angular 5中构建了一个动态表单组件(基于https://angular.io/guide/dynamic-form的留档和示例)。

一切正常,直到我尝试使用有棱角的材料。

我在这里读过很多关于类似问题的文章,但它们似乎都是因为人们没有导入正确的模块,或者没有使用mdInput或mat Input而不是matInput。我遇到的问题并非如此。

任何想法或建议将不胜感激。

已更改代码-因错误而中断-

*mat-form-field必须包含MatFormFieldControl。***

动态表单控件组件模板

我对下面的工作代码所做的唯一更改是将输入字段包装起来,并将matInput属性添加到输入字段。

我通过一个核心模块导入所有材料模块(MatFormFieldModule和MatInputModule等)。我所有的材料输入和表单字段都在应用程序的所有其他组件中工作,因此我不认为问题在于导入中缺少任何内容。

<div [formGroup]="form">

    <div [ngSwitch]="control.controlType">
        <mat-form-field>
            <input matInput placeholder="{{control.label}}" *ngSwitchCase="'textbox'" [formControlName]="control.key" [id]="control.key"
                [type]="control.type">
        </mat-form-field>
        <select [id]="control.label" *ngSwitchCase="'dropdown'" [formControlName]="control.key">
            <option value="">Select {{control.label}}</option>
            <option *ngFor="let opt of control.options" [value]="opt.key">{{opt.value}}</option>
        </select>
    </div>

    <div class="errorMessage" *ngIf="!isValid">{{control.label}} is required</div>
</div>

目前的代码-这是完美的工作,但我没有得到的角度材料格式

选择器

<mi-dynamic-form [controls]="controls"></mi-dynamic-form>

动态形式组件

    import { Component, Input } from '@angular/core';
import { FormGroup, FormControl } from '@angular/forms';

import { DynamicFormBase } from './dynamic-form-base';

@Component({
    selector: 'mi-control',
    templateUrl: './dynamic-form-control.component.html'
})
export class DynamicFormControlComponent {

    // API
    @Input() control: DynamicFormBase<any>;
    @Input() form: FormGroup;

    get isValid() { return this.form.controls[this.control.key].valid; }
}

动态表单组件模板

    <div [formGroup]="form">
    <div [ngSwitch]="control.controlType">
            <input  placeholder="{{control.label}}" *ngSwitchCase="'textbox'" [formControlName]="control.key" [id]="control.key"
                [type]="control.type">
        <select [id]="control.label" *ngSwitchCase="'dropdown'" [formControlName]="control.key">
            <option value="">Select {{control.label}}</option>
            <option *ngFor="let opt of control.options" [value]="opt.key">{{opt.value}}</option>
        </select>
    </div>

    <div class="errorMessage" *ngIf="!isValid">{{control.label}} is required</div>
</div>

动态表单控制组件

import { Component, Input } from '@angular/core';
import { FormGroup, FormControl } from '@angular/forms';

import { DynamicFormBase } from './dynamic-form-base';

@Component({
    selector: 'mi-control',
    templateUrl: './dynamic-form-control.component.html'
})
export class DynamicFormControlComponent {

    // API
    @Input() control: DynamicFormBase<any>;
    @Input() form: FormGroup;

    get isValid() { return this.form.controls[this.control.key].valid; }
}

动态表单控件组件模板

 <div [formGroup]="form">
        <!-- <label [attr.for]="control.key">{{control.label}}</label> -->

        <div [ngSwitch]="control.controlType">
            <mat-form-field>
                <input matInput placeholder="{{control.label}}" *ngSwitchCase="'textbox'" [formControlName]="key" [id]="control.key"
                    [type]="control.type">
            </mat-form-field>
            <mat-select [id]="control.label" *ngSwitchCase="'dropdown'" [formControlName]="control.key">
                <mat-option value="">Select {{control.label}}</mat-option>
                <mat-option *ngFor="let opt of control.options" [value]="opt.key">{{opt.value}}</mat-option>
            </mat-select>
        </div>

        <div class="errorMessage" *ngIf="!isValid">{{control.label}} is required</div>
    </div>

共有2个答案

慎风畔
2023-03-14

我相信你已经解决了这个问题。mat-form-field的错误必须包含MatFormFieldControl。意味着所使用的材料组件没有导入。即MatButtonMoules需要被导入时,使用matt-按钮指令。

陈德泽
2023-03-14

我可以用角度动力学的形式和材料得到这个。检查工作stackblitz的例子在这里显示了动态形式和材料的使用。

 类似资料:
  • html SystemJS配置 家庭组件 问-我如何修复这个未知元素的问题?谢了!

  • 我目前使用这种代码进行输入: 并且我需要在输入(内联)之前有一个标签,它看起来像一个带有轮廓外观的mat-form-field。我不想把另一个输入,但禁用之前有良好的风格。 完美的输出将是: 有办法做到这一点吗?

  • 我正试图用有棱角的材料做一个形状。此表单允许客户修改其个人数据(带有输入字段)。对于这种情况,我使用“mat form field”组件 但是也有一些字段他不能修改(比如他的名字)。对于这种情况,我不知道使用什么元素。我想要一些与材料设计兼容的,但我找不到。 这是我的密码: 有什么好主意吗? 谢啦

  • 我需要一些关于角度拖放的参考资料,我浏览了angular文档,但它不起作用,我需要开发一个页面,在那里我可以用angular将工具拖动到画布上。如果有人知道这一点,请帮助。

  • 为什么这不起作用?我尝试导入angular网站上显示的MomentDateAdapter,但Visual Studio代码一直抱怨找不到@angular/material moment adapter。我做错了什么? 版本信息:Angular CLI:1.5.0节点:6.11.0操作系统:达尔文x64 Angular:4.4.6。。。动画,通用,编译器,编译器cli,核心,窗体。。。http,语言

  • > 到目前为止,我使用角2快速入门创建了一个新项目。 我决定开始使用angular 2 cli,并创建了一个新的angular 2 cli项目。 移动了我的所有文件并重新安装了所有软件包。 现在,当我试图在CLI项目中使用角2材料时,我遵循了这里的指南,但这是我得到的: 会出什么问题?