首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >反应形式的输入/离子输入. ChangeDetectionStrategy的问题

反应形式的输入/离子输入. ChangeDetectionStrategy的问题
EN

Stack Overflow用户
提问于 2020-05-04 03:46:53
回答 1查看 605关注 0票数 0

我有多个表单中输入字段的模板(请忽略objToKeys -它是自定义管道,它可以工作):

代码语言:javascript
复制
<div [formGroup]="form">
  <ion-item>
    <ion-label color="primary" position="floating">{{ label }}</ion-label>

    <ion-input type="text" formControlName="{{ controlName }}"></ion-input>
  </ion-item>

  <div *ngIf="form.controls[controlName].touched && form.controls[controlName].errors" class="form-error-messages">
    <div *ngFor="let key of form.controls[controlName].errors | objToKeys">
      <ion-icon color="danger" name="alert-outline"></ion-icon>
      <ion-label class="ion-padding-start" color="danger" class="ion-align-items-end">
        {{ form.controls[controlName].errors[key].message }}
      </ion-label>
    </div>
  </div>
</div>

我试图通过创建一个自定义组件来简化这个模板:component.ts

代码语言:javascript
复制
import { Component, OnInit, Input } from '@angular/core';
import { FormGroup } from '@angular/forms';

@Component({
  selector: 'app-form-input',
  templateUrl: './form-input.component.html',
  styleUrls: ['./form-input.component.scss'],
})
export class FormInputComponent implements OnInit {
  @Input() label: string;
  @Input() controlName: string;
  @Input() form: FormGroup;
  constructor() {}

  ngOnInit() {}
}

component.html

代码语言:javascript
复制
<div [formGroup]="form">
  <ion-item>
    <ion-label color="primary" position="floating">{{ label }}</ion-label>
    <ion-input type="text" formControlName="{{ controlName }}"></ion-input>
  </ion-item>
  <div *ngIf="form.controls.name.touched && form.controls.name.errors" class="form-error-messages">
    <div *ngFor="let key of form.controls.name.errors | objToKeys">
      <ion-icon color="danger" name="alert-outline"></ion-icon>
      <ion-label class="ion-padding-start" color="danger" class="ion-align-items-end">
        {{ form.controls.name.errors[key].message }}
      </ion-label>
    </div>
  </div>
</div>

请注意,在上面的html中,输入被包装在带有[formGroup]="form".的div中。我没有包装它,然后角抱怨formControl没有包含在模板组中。但是,注意到,调用它的父组件具有formGroup属性.

代码语言:javascript
复制
<form [formGroup]="form" (ngSubmit)="onSubmit()" #formRef="ngForm">
  <app-form-input [label]="'Insitution Name'" [controlName]="'name'" [form]="form"></app-form-input>


  <app-actions
    slot="end"
    [itemType]="'summary'"
    [actionMode]="'answer'"
    [formMode]="formMode"
    (saveSummary)="submitForm()"
    (cancelSummary)="onCancel()"
  ></app-actions>
</form>

,为什么一开始就抱怨,我的解决方案是正确的吗?这是实现组件重用的好方法吗?

EN

回答 1

Stack Overflow用户

发布于 2020-05-05 14:59:31

关于同一主题有几个问题。我在link.Do上发布了一篇详尽的搜索。显然这是一个常见的错误。

我的解决方案基于Netanel的这个博客

我将父组件上的ChangeDetectionStarategy更改为:changeDetection: ChangeDetectionStrategy.OnPush,

此更改消除了错误:

Expression has changed after it was checked. Previous value: 'ng-valid: true'. Current value: 'ng-valid: false'

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61584852

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档