【问题标题】:Angular Form Validation only works, when input then deleteAngular 表单验证仅在输入时有效,然后删除
【发布时间】:2021-08-20 03:21:14
【问题描述】:

当没有输入时,我希望表单的提交按钮为空白。但我的问题是提交时只有空白,当你输入时,而不是删除它。

<form [formGroup]="resourceForm" (ngSubmit)="createResource(title.value, link.value, description.value)">
          
          <div class="form-group">
            <div class="modal-body">
              <label for="title">Titel</label>
              <div class="input-group">
                <input #title formControlName="title" type="text" class="form-control" id="title"
                  placeholder="Titel"
                  [class.is-invalid]="resourceForm.get('title').invalid && resourceForm.get('title').touched">
                <div class="invalid-feedback">
                  Titel darf nicht leer sein
                </div>
              </div>

              <label for="link">Link (Optional)</label>
              <input #link type="text" formControlName="link" class="form-control" id="link" placeholder="Link">

              <label for="description">Beschreibung</label>
              <div class="input-group">
                <textarea #description formControlName="description" type="text" class="form-control"
                  id="description"
                  [class.is-invalid]="resourceForm.get('description').invalid && resourceForm.get('description').touched"
                  placeholder="Beschreibung"></textarea>
                <div class="invalid-feedback">
                  Beschreibung darf nicht leer sein
                </div>
              </div>

            </div>
            <div class="modal-footer">
              <button class="btn btn-primary" data-dismiss="modal" type="submit"
                
                [disabled]="!resourceForm.valid">Hinzufügen</button>
            </div>
          </div>
        </form>

【问题讨论】:

  • 你能展示你的组件代码吗?

标签: angular typescript forms validation controls


【解决方案1】:

我不完全推荐这个,但这应该可以满足您的需求:

代替[disabled]="!resourceForm.valid" 做:

[disabled]="!resourceForm.touched || !resourceForm.valid"

出现问题是因为表单在被触摸之前应该是有效的。

【讨论】:

  • 我不推荐它的原因是因为它可能不会带来最好的用户体验。
【解决方案2】:

所以我遇到这个问题的原因是因为我的 Formbuilder 的打字稿代码设置错误。

我有什么:

public resourceForm = this.formBuilder.group({
    title : [['', Validators.required]],
    link  : [['', ]],
    description : [['', Validators.required]],

});

什么是对的:

public resourceForm = this.formBuilder.group({
    title : ['', [Validators.required]],
    link  : ['', []],
    description : ['', [Validators.required]],

});

【讨论】:

    猜你喜欢
    • 2021-06-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-21
    • 1970-01-01
    • 2019-03-15
    • 2018-04-04
    • 1970-01-01
    相关资源
    最近更新 更多