angular元素属性绑定_【Angular】表单
模板式表单
表单数据模型通过组件模板中的相关指令定义,但是只适用于一些简单的场景。比较死板
指令:来自FormsModule模块中
在app.modules.ts中
import { FormsModule } from "@angular/forms";
@NgModule({ declarations: [
], imports: [ FormsModule ],
})
ngForm 作用
1.ngForm指令可以发现所有标有 ‘ngModel’的子元素,并将其值添加到表单模型中 创建FormGroup的实例,将数据存储在ngForm.value对象中。
2.任何标有“ngForm”指令的元素都会有此作用。不论是不是form表单元素
3.当不希望Angular接管表单时,可给表单标签添加“ngNoForm”指令。
4.ngForm指令可以被模板本地变量引用,来访问模板表单的实例
5.会阻止表单的提交并刷新,使用**ngSubmit**事件来提交
6.隐式创建FormGroup类型的实例
ngModel 作用
1.ngModel是ngForm指令所在元素的子元素的字段,与name属性相关联(仅当添加name属性后才能被模板捕获,创建数据模型)。
2.会隐式创建FormControl的实例,来代表该字段,并用FormControl创建的对象存储其值。
3.ngModel代表一个字段,而不是双向绑定,不需要绑定变量,也不需要在组件中声明变量。
4.ngModel指令可以被模板本地变量引用,来访问模板表单的字段的值。
ngFormGroup 作用:
1.与ngForm类似,也会创建FormGroup的实例,该数据是嵌套在ngForm.value对象中的。
2.用来将有联系的表单元素放置于一块,并组成对象格式数据。
示例:
在app.module.ts导入FormsModule:
import { BrowserModule } from '@angular/platform-browser';import { NgModule } from '@angular/core';import { FormsModule } from "@angular/forms";import { AppRoutingModule } from './app-routing.module';import { AppComponent } from './app.component';import { HeaderComponent } from './components/header/header.component';
@NgModule({ declarations: [ AppComponent, HeaderComponent ], imports: [ BrowserModule, AppRoutingModule, FormsModule ], providers: [], bootstrap: [AppComponent]})export class AppModule { }
在app.component.html:
<h1>
{{ msg }}h1><form #myForm="ngForm" (ngSubmit)="createUser(myForm.value)">
<div>姓名:<input type="text" #myName="ngModel" ngModel name="myname">div>
<div>邮箱:<input type="email" ngModel name="email">div> <div>手机号:<input type="number" ngModel name="mobile">div> <div ngModelGroup="passwordInfo"> <div>密码:<input type="password" ngModel name="password">div> <div>确认密码:<input type="password" ngModel name="passwordConfirm">div> div> <button tyoe="submit">注册button>form><div> {{myForm.value | json}}
div><div> {{myName.value | json}}
div>
<router-outlet>router-outlet>
在app.component.ts中:
import { Component } from '@angular/core';
@Component({ selector: 'app-root', templateUrl: './app.component.html', styleUrls: ['./app.component.scss']})export class AppComponent { #myForm="ngForm" msg = '欢迎来到码上加油站'; createUser(info: any) { console.log(info);}}
运行项目:
响应式表单
通过typescript创建底层的数据模型。可通过特定的指令将模板上的HTML元素和底层的数据模型相联系。比较灵活。
表单指令:
编写步骤:
(1)用代码编写数据模型
(2)将数据模型与HTML页面ngModel相连接
数据模型:
用来保存表单数据的数据结构,简称模型。
由FormsModule中的三个类组成:FormControl、FormGroup、FormArray.
FormControl指代form中的单个字段
FormGroup指代form中的所有字段或者有关联的字段,类型为对象,可嵌套
FormArray指代form中可能有多个值的字段,类型为数组
示例:
app.module.ts
import { BrowserModule } from '@angular/platform-browser';import { NgModule } from '@angular/core';import { ReactiveFormsModule } from '@angular/forms';import { AppRoutingModule } from './app-routing.module';import { AppComponent } from './app.component';import { HeaderComponent } from './components/header/header.component';
@NgModule({ declarations: [ AppComponent, HeaderComponent ], imports: [ BrowserModule, AppRoutingModule, ReactiveFormsModule,
], providers: [], bootstrap: [AppComponent]})export class AppModule { }
在app.component.html:
<h1>
{{ msg }}h1>
<form [formGroup]="formModel" (submit)="createUser()">
<div>姓名:<input type="text" formControlName="nickname">div> <div>邮箱: <ul formArrayName="emails">
<li *ngFor="let email of formModel.get('emails')['controls'];let i = index;"> <input [formControlName]="i"> li> ul> <button tyoe="button" (click)="addEmail()">增加emailbutton>
div> <div>手机号:<input type="number" formControlName="mobile">div> <div formGroupName="passwordInfo">
<div>密码:<input type="password" formControlName="password">div> <div>确认密码:<input type="password" formControlName="passwordConfirm">div> div> <button tyoe="submit">注册button>form>
<router-outlet>router-outlet>
在app.component.ts中:
import { Component, OnInit } from '@angular/core';import { FormBuilder, FormGroup, FormArray, FormControl } from '@angular/forms';@Component({ selector: 'app-root', templateUrl: './app.component.html', styleUrls: ['./app.component.scss']})export class AppComponent implements OnInit { formModel: FormGroup; fb: FormBuilder = new FormBuilder(); msg = "码上加油站" constructor() {
this.formModel = new FormGroup({ // 整个表单是FormGroup类型的数据 nickname: new FormControl(), // 昵称为FormControl类型的数据 mobile: new FormControl(), emails: new FormArray([ // 数组 new FormControl('a@a.com'), new FormControl('b@b.com') ]), passwordInfo: new FormGroup({ // 密码是FormGroup类型的数据,被嵌套在FormGroup中 password: new FormControl(), passwordConfirm: new FormControl() }) }); }
ngOnInit(): void {
} addEmail() { let emails = this.formModel.get('emails') as FormArray; emails.push(new FormControl()); console.log(this.formModel.value); }
createUser() { console.log(this.formModel.value); }
}
也可以写成:
import { Component, OnInit } from '@angular/core';import { FormBuilder, FormGroup, FormArray, FormControl } from '@angular/forms';@Component({ selector: 'app-root', templateUrl: './app.component.html', styleUrls: ['./app.component.scss']})export class AppComponent implements OnInit { formModel: FormGroup; fb: FormBuilder = new FormBuilder(); msg = "码上加油站" constructor() { this.formModel = this.fb.group({ nickname: ['hello'], mobile: [''], emails: this.fb.array([ ['a@a.com'], ['b@b.com'] ]), passwordInfo: this.fb.group({ password: [''], passwordConfirm: [''] }) }); // this.formModel = new FormGroup({ // 整个表单是FormGroup类型的数据 // nickname: new FormControl(), // 昵称为FormControl类型的数据 // mobile: new FormControl(), // emails: new FormArray([ // 数组 // new FormControl('a@a.com'), // new FormControl('b@b.com') // ]), // passwordInfo: new FormGroup({ // 密码是FormGroup类型的数据,被嵌套在FormGroup中 // password: new FormControl(), // passwordConfirm: new FormControl() // }) // }); }
ngOnInit(): void {
} addEmail() { let emails = this.formModel.get('emails') as FormArray; emails.push(new FormControl()); console.log(this.formModel.value); }
createUser() { console.log(this.formModel.value); }
}
运行项目:
两种表单的区别
1.都需要数据模型来存储表单数据。
2.数据模型由angular/forms模块中的一些特定的类,如FormControl,FormGroup等组成。
3.模板式表单中,数据模型由组件模板中的指令隐式创建。响应式表单中,数据模型自己来创建,并与HTML元素相连接。
4.模板式表单中,不能访问这些类;而响应式可以。
5.模板式表单只需引入FormsModule模块
6.使用响应式,必须引入 FormsModule、 ReactiveFormsModule这两个模块。
完
码上加油站
一起来加油
长按扫码关注
记得点个赞和在看哦!
angular元素属性绑定_【Angular】表单相关推荐
- angular元素属性绑定_AngularJS语法基础及数据绑定——详解各种数据绑定指令、属性应用...
AngularJS简单易学,但是功能强大.特别是在构建单页面应用方面效果显著.而 数据绑定 可以说是他被广泛使用的最主要的优点.他舍弃了对DOM的操作方式,一切都由AngularJS来自动更新视图,我 ...
- Angular元素属性绑定的一个例子
如下图的例子:a标签的disabled class绑定到model.active属性的取反值,即如果model.active为false,该标签就为disabled状态. 这个a标签页默认是disab ...
- 前端JavaScript DOM BOM 自学复盘 D1(DOM-获取DOM元素、修改HTML标签/表单/css样式属性、定时器-间歇函数)
内容概要 1. Web API 基本认知 1.1. 作用和分类 1.2. 什么是DOM 1.3. DOM作用 1.4 DOM树 1.4.1. DOM树是什么? 1.4.2. DOM 树的作用 1.5 ...
- JS表单的获取、表单元素的获取、提交表单
获取表单 document.getElementById("id属性值"),通过表单的id属性值获取属性对象 document.表单的name属性值,通过表单的name属性值获取表 ...
- HTML基本语法之表单标签:表单的组成 ,表单域,表单控件元素(表单元素) ,input表单元素, label标签, 表单控件(表单元素), select表单元素, textarea表单元素
文章目录 表单标签 表单的组成 表单域 常用属性: 表单控件元素(表单元素) input表单元素 label标签 表单控件(表单元素) select表单元素 textarea表单元素 表单元素几个总结 ...
- jq选择器||基本选择器 层级选择器 属性选择器 过滤选择器 表单过滤选择器
基本选择器 层级选择器 属性选择器 过滤选择器 表单过滤选择器 1. 基本选择器 1. 标签选择器(元素选择器) * 语法: $("html标签 ...
- html5基础(网页基本标签、图像标签、超链接、列表、表格、媒体元素、iframe框架、表单)
网页的基本信息 1.DOCTYPE声明 文档类型的声明,约束HTML文档结构,检验是否符合相关Web标准,同时告诉浏览器,使用哪种规范来解释这个文档中的代码.DOCTYPE声明必须位于HTML文档第一 ...
- java 文本域不可编辑_实现表单input文本框不可编辑的三种方法
问题 有时,我们需要以不可编辑的模式显示表单域,那么如何实现?我们可以通过为表单字段(input文本框,标签,复选框,文本区域)设置以下方法来实现表单的不可编辑功能. 实现方式 1.οnfοcus=t ...
- java 文本框只读_处理表单使input等文本框为只读不可编辑的方法
方法1: οnfοcus=this.blur() 方法2:readonly 方法3: disabled Readonly和Disabled它们都能够做到使用户不能够更改表单域中的内容.但是它们之间有着 ...
最新文章
- 【说人话】真正意义上讲清楚了如何用$emit()在Vue.js的自定义组件中实现v-model=“”双向绑定
- ubuntu 14.04 下通过apt-get 安装jdk
- R语言限制性立方样条(RCS, Restricted cubic spline)分析:基于logistic回归模型、南非心脏病数据集(South African Heart Disease)
- 实际运维中处理的事故问题
- 购买Entrust SSL 数字证书?你怎么看?
- 自动去除所有目录的隐藏属性的DOS命令
- as3.0用了视频组件,导致视频打开后就全屏,加一下代码就行
- Kotlin reduce、fold
- shell看java控制台_java - 为什么我的shell脚本的输出不能打印在控制台? - SO中文参考 - www.soinside.com...
- U-Mail邮件服务系统任意文件上传+执行漏洞(runtime缺陷与验证绕过)
- Linux 安装 OpenOffice
- php数据库搬家,php 用adodb实现数据库搬家
- Linux下配置Hadoop全分布式环境
- 飞秋命令行发送消息和文件
- 最好用的文件上传插件 bootstrap fileInput
- Mysql 8踩坑之1054(42S22):Unkown column ‘password‘ in ‘field list‘ 与1251- Client deos not support authen
- Pm2 部署 Nuxt 项目
- 音创ktv点歌系统服务器,音创ktv点歌系统家庭版
- BLUES吉他学习笔记005 bluesrv[9]
- Nodejs教程15:net模块初探
热门文章
- 皮一皮:爱迪生看了流泪,特斯拉看了沉默...
- 每日一皮:是金子无论到哪里、哪怕变个形状都会发光..
- 中国人寿保险研发中心2021校招开始啦!
- 每日一皮:实习生将他的代码交给高级开发人员,高级开发反手一个...
- Redis 哨兵架构基础
- oracle如何降低逻辑读,如何降低该SQL的逻辑读
- redis php web管理,redis web管理工具phpRedisAdmin安装
- C#机房重构-总结(一)
- rknn 学习资料整理
- python numpy转字符串