美文网首页angularionic3从入门到精通(内含BUG修复)Angular开发指南
细说 Angular 2+ 的表单(一):模板驱动型表单

细说 Angular 2+ 的表单(一):模板驱动型表单

作者: 接灰的电子产品 | 来源:发表于2017-04-24 17:32 被阅读2325次

    细说 Angular 2+ 的表单(二):响应式表单

    摘要

    在企业应用开发时,表单是一个躲不过去的事情,和面向消费者的应用不同,企业领域的开发中,表单的使用量是惊人的。这些表单的处理其实是一个挺复杂的事情,比如有的是涉及到多个 Tab 的表单,有的是向导形式多个步骤的,各种复杂的验证逻辑和时不时需要弹出的对话框等等。笔者试图在这一系列文章中对 Angular 中的表单处理做一个相对完整的梳理。

    Angular 中提供两种类型的表单处理机制,一种叫模版驱动型(Template Driven)的表单,另一种叫模型驱动型表单( Model Driven ),这后一种也叫响应式表单 ( Reactive Forms ),由于模版驱动中有一个 ngModel 的指令,容易和这里说的模型驱动混淆,所以在我们的文章中叫后一种说法:响应式表单。

    第一篇主要介绍模版驱动型的表单。

    模版驱动的表单

    模版驱动的表单和 AngularJS 对于表单的处理类似,把一些指令(比如 ngModel )、数据值和行为约束(比如 requireminlength 等等)绑定到模版中(模版就是组件元数据 @Component 中定义的那个 template ),这也是模版驱动这个叫法的来源。总体来说,这种类型的表单通过绑定把很多工作交给了模版。

    模版驱动的例子

    还是用例子来说话,比如我们有一个用户注册的表单,用户名就是 email ,还需要填的信息有:住址、密码和重复密码。这个应该是比较常见的一个注册时需要的信息了。那么我们第一步来建立领域模型:

    // src/app/domain/index.ts
    export interface User {
      // 新的用户id一般由服务器自动生成,所以可以为空,用 ? 标示
      id?: string; 
      email: string;
      password: string;
      repeat: string;
      address: Address;
    }
    
    export interface Address {
      province: string; // 省份
      city: string; // 城市
      area: string; // 区县
      addr: string; // 详细地址
    }
    

    接下来我们建立模版文件,一个最简单的 HTML 模版,先不增加任何的绑定或事件处理:

    <!-- template-driven.component.html -->
    <form novalidate>
      <label>
        <span>电子邮件地址</span>
        <input
          type="text"
          name="email"
          placeholder="请输入您的 email 地址">
      </label>
      <div>
        <label>
          <span>密码</span>
          <input
            type="password"
            name="password"
            placeholder="请输入您的密码">
        </label>
        <label>
          <span>确认密码</span>
          <input
            type="password"
            name="repeat"
            placeholder="请再次输入密码">
        </label>
      </div>
      <div >
        <label>
          <span>省份</span>
          <select name="province">
            <option value="">请选择省份</option>
          </select>
        </label>
        <label>
          <span>城市</span>
          <select name="city">
            <option value="">请选择城市</option>
          </select>
        </label>
        <label>
          <span>区县</span>
          <select name="area">
            <option value="">请选择区县</option>
          </select>
        </label>
        <label>
          <span>地址</span>
          <input type="text" name="addr">
        </label>
      </div>
      <button type="submit">注册</button>
    </form>
    

    渲染之后的效果就像下面这样:

    Angular从零到一

    相关文章

      网友评论

      • c6a11255b80b:从自定义验证那里开始完全看不懂,直接进入蒙B状态!!!
      • 88fdaa09c32a:你好 我想问下 我把模版驱动表单里面的部分控件抽取出来作为一个子组件,页面可以正常显示,但是form.value取不到子组件的值,属性应该也是没有取到,因为验证没有起作用,会是什么原因啊?
        88fdaa09c32a:@接灰的电子产品 什么意思啊?是要用响应式表单么?
        接灰的电子产品:@简_简_简 一般组件是不行的,需要实现表单组件
      • 熊孩子CEO:这个例子没怎么看懂 为什么要给那个user再另外赋值
        接灰的电子产品:@熊孩子CEO 什么意思,你指的哪里?
      • 北京大数据苏焕之:你有这微信吗?我也爱好写文章!能不能加个好友,没有别的意思就是平常交流交流!😁😁😁如果有冒犯请谅解!喜欢你的文章想认识你一下

      本文标题:细说 Angular 2+ 的表单(一):模板驱动型表单

      本文链接:https://www.haomeiwen.com/subject/kyvpzttx.html