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

关于模板驱动形式中ngForm和ngModel的概念

曾嘉荣
2023-03-14

事件绑定用于将数据从模板传递到类中。

使用Foll实现了双向绑定。4种方式:

  1. 使用ngModel banana语法:
<input [(ngModel)]="username">
<p>Hello {{username}}!</p>
<input [ngModel]="username" (ngModelChange)="username = $event">
<p>Hello {{username}}!</p>
<input [value]="username" (input)="username = $event.target.value">
<p>Hello {{username}}!</p>
<input [value]="username" (input)="username = varTest.value" #varTest>
<p>Hello {{username}}!</p>
<custom-counter [(counter)]="someValue"></custom-counter>
<p>counterValue = {{someValue}}</p>

使用[(ngModel)]=varName与编写[(ngModel)]name=varName是否相同?

拜托,我需要一些澄清。谢了。

共有1个答案

姚飞昂
2023-03-14

是的,这些概念一开始可能会令人困惑。但是您在上面指定的关于双向绑定的一些信息是不正确的:

双向约束

[(ngModel)]=“LastName”

UI与组件属性的值保持同步。这个类似于插值:{{lastName}}

一次性绑定

ngmodel=“lastname”

#lastNameVar="ngModel"    /* for a form model element eg input element*/
#f="ngForm"               /* for the form itself */
  <div class="form-group row mb-2">
    <label class="col-md-2 col-form-label"
           for="lastNameId">Last Name</label>
    <div class="col-md-8">
      <input class="form-control"
             id="lastNameId"
             type="text"
             placeholder="Last Name (required)"
             required
             maxlength="50"
             [(ngModel)]="customer.lastName"
             name="lastName"
             #lastNameVar="ngModel"
             [ngClass]="{'is-invalid': (lastNameVar.touched || lastNameVar.dirty) && !lastNameVar.valid }" />
      <span class="invalid-feedback">
        <span *ngIf="lastNameVar.errors?.required">
          Please enter your last name.
        </span>
        <span *ngIf="lastNameVar.errors?.maxlength">
          The last name must be less than 50 characters.
        </span>
      </span>
    </div>
  </div>

或者对于表单的示例,您可以检查表单状态以禁用保存按钮,例如:

      <button class="btn btn-primary"
              type="submit"
              [disabled]="!f.valid">
        Save
      </button>

如果不需要访问模板中窗体的状态,则不需要模板引用变量。

您还可以将表单的模板引用变量传递到组件中,以访问表单值或状态:

<form novalidate
      (ngSubmit)="save(signupForm)"
      #signupForm="ngForm">
  save(customerForm: NgForm) {
    console.log('Saved: ' + JSON.stringify(customerForm.value));
  }
<form novalidate
      (ngSubmit)="save(lastName, firstName, phone, email)">
 类似资料:
  • 本章主要介绍一些Docker Engines1.12集群管理和业务流程特性的独特概念。 Swarm是什幺? Docker Engines的集群管理和业务流程功能是由swarmkit构建的。Swarmkit是一个独立的项目,由Docker直接调用来实现Docker的业务流程层。 Swarm由多个运行了swarm模式Docker Engine的宿主机组成,每一个宿主机扮演了manager角色或者wor

  • 了解如何在 Dreamweaver“设计”视图和“代码”视图中识别模板和基于模板的文档。 在“设计”视图中识别模板 在“设计”视图中,可编辑区域出现在“文档”窗口的矩形外框中。查看“文档”窗口中的底部窗格可看到区域的名称。 通过查看“文档”窗口中的标题栏,可以识别模板文件。文件的文件扩展名为 .dwt。在“设计”视图中识别模板 在“代码”视图中识别模板 在“代码”视图中,使用以下注释标记 HTML

  • 首先,考虑一个典型的表单: index.html signup-form.component.ts

  • 摘要 本文将介绍 RT-Thread Studio 对于硬件外设驱动的支持情况。由于 RT-Thread nano 版本不具有设备概念,所以本文提到的 RT-Thread 为完整版本。nano 版建议直接使用 HAL 库进行驱动开发。 驱动概况 当前 RT-Thread Studio 驱动开发方式主要分为二种 1、由 RT Thread Studio 自动生成,无需修改任何文件或者简单定义几个宏即