javascript - Angular 6如何在表单中制作所有输入的不可编辑元素

标签 javascript angular angular-material

有没有办法禁用并使所有字段不可编辑 (input/mat-select/textfield/option/input/mat-checkbox etc) 表单内

通过仅在 Angular/Angular-material 中告知父 div 名称? (无法编辑它们)

@Component({
  templateUrl: './leaseholder.component.html'
})
export class LeaseholderComponent implements OnInit, IFormDirtyWarningComponent {

  leaseholderForm: FormGroup;

  constructor(private router: Router, private formBuilder: FormBuilder) {
    this.createLeaseholderForm();
  }

  createLeaseholderForm() {
    this.leaseholderForm = this.formBuilder.group({
      civility: [this.identityModel.civility],
      firstName: [this.identityModel.firstName, Validators.compose([Validators.pattern("[^\\d]+")])],
      lastName: [this.identityModel.lastName, Validators.compose([Validators.pattern("[^\\d]+")])],
      birthName: [this.identityModel.birthName, Validators.compose([Validators.pattern("[^\\d]+")])],
      birthDate: [this.identityModel.birthDate],
      birthPlace: [this.identityModel.birthPlace, Validators.compose([Validators.pattern("[^\\d]+")])],
      nationality: ['FR', this.identityModel.nationality],
      endOfStay: [this.identityModel.endOfStay]
    });
  }

    <form [formGroup]="leaseholderForm" (ngSubmit)="onSubmit()">
                <div class="mat-radio-group-inverted">
                    <mat-radio-group formControlName="civility">
                        <mat-radio-button color="primary" value="MR">M.</mat-radio-button>
                        <mat-radio-button color="primary" value="MME">MME.</mat-radio-button>
                    </mat-radio-group>
                </div>
                <mat-form-field>
                    <input matInput upperCaseInput placeholder="Nom d'usage" formControlName="lastName">
                </mat-form-field>
...........................
..........  example
    </form>

最佳答案

禁用和不可编辑不一定是一回事。一个禁用的输入当然也是不可编辑的,但它有一个独特的外观——灰色并且看起来“禁用”。只读输入看起来与普通输入相同,但不可编辑。因此,您必须问自己是要实际禁用控件还是只读。

如果你只想只读,你可以简单地使用 readonly <input>的属性(property)并将其绑定(bind)到 Controller 中的变量。例如:

export class LeaseholderComponent implements OnInit, IFormDirtyWarningComponent {

    @Input() editable: boolean = false; // doesn't have to be an @Input
    ...
}

<form [formGroup]="leaseholderForm" (ngSubmit)="onSubmit()">
    <mat-form-field>
        <input matInput [readonly]="!editable" upperCaseInput placeholder="Nom d'usage" formControlName="lastName">
    </mat-form-field>
    ...
</form>

请注意 editable属性不需要是 @Input ,但如果您将表单用作可重用组件并需要在 DOM 级别做出可编辑/只读决定,这可能会很有用。

对于单选按钮等其他组件,其中没有 readonly属性可用,您可能应该重新考虑布局。使用不同的组件以只读模式显示单选选项可能比完整的选项列表更有意义。例如,使用标签和值对:

<div *ngIf="editable; else readonlyRadio" class="mat-radio-group-inverted">
    <mat-radio-group formControlName="civility">
        <mat-radio-button color="primary" value="MR">M.</mat-radio-button>
        <mat-radio-button color="primary" value="MME">MME.</mat-radio-button>
    </mat-radio-group>
</div>
<div #readonlyRadio>
    <label>Civility</label>
    <span>{{ leaseholderForm.controls['civility'].value }}</span>
</div>

关于javascript - Angular 6如何在表单中制作所有输入的不可编辑元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51027615/

相关文章:

user-interface - Angular 9 Material 将垫卡显示为父级和子级,如图所示

javascript - 如何循环遍历 Firebase 文档以查找匹配文档,然后提取名称?

javascript - 让 Javascript 检查按下了哪个 Button 并用它更改特定的 HTML 详细信息

javascript - 循环内的 Http 请求

javascript - 如何使用 Visual Studio 2013 和 Node Tools NTVS 调试 node.js 应用程序

angular - 在 Docker 中运行 Angular2 应用程序

javascript - Angular 2 - Kendo UI 下拉列表默认值

angular - 在 angular2 中调用 enableProdMode 的最佳模式

angular-material - 垫选择面板最小宽度

javascript - Angular Material md-select 空值验证不起作用