angular表单,与服务器通讯,构建与部署---angular总结

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/a954553391/article/details/88978508

(一)angular表单API

1.模板式表单

①是什么

表单的数据类型是通过组件模板中的相关指令来定义的,因为使用这种方式定义表单的数据模型时,
我们会受限于HTML语法,所以,模板驱动方式只适合用于一些简单的场景。

在这里插入图片描述
②怎么用

模板式表单:
NgForm:自动的添加到Form标签上,可以在form标签之外使用<div ngForm>;

如果不希望angular自动处理表单,需要在form明确加上ngNoForm<div acution="/regist" method="post" ngNoForm>;

可以被模板本地变量引用,以便在模板中访问ngForm的实例<form #myForm="ngForm"><div>{{myForm.value | json}}</div>

可以自动的发现所有标有ngModel的子元素,并且把他们的值添加到表单模型上;

会阻止表单的自动提交,防止页面刷新,用ngSunmit来代替<form #myForm="ngForm" (ngSubmit)="onSubmit(myForm.value)">

NgModel代表表单中的一个字段,这个指令会隐式的创建一个FormControl的实例,来代表字段的数据模型,存储字段的值;

在标记了NgForm的HTML元素指令的元素内,使用ngModel不需要用小括号或方括号将其扩起来,直接写ngModel即可<div><input ngModel type="text"></div>

创建的对象也可以通过模板变量来引用,并通过这个模板变量的value属性来访问字段的值

NgModelGroup代表表单的一部分,可以将表单字段组织在一起,形成更清晰的层次关系,也会创建FormGroup实例

2.响应式表单

①是什么

使用响应式表单时,可以通过编写TypeScript代码而不是HTML代码来创建一个底层的数据模型,
在这个模型定义好以后,使用一些特定的指令,将模板上的HTML元素与底层的数据模型连接在一起。

在这里插入图片描述
②怎么用

响应式表单所有指令都是form开头的,可以直接访问数据模型相关的类,因为不可引用,
所以【不能在模板中操作这些数据模型,只能在代码中操作】

其他如ngModel是模板式表单,不能访问数据模型相关的类(FormGroup、FormControl),
只能拿到表单最终的数据,可以在模板中通过模板本地变量来操作这些数据<form #myForm="ngForm">【只能在模板操作,不能代码操作】

所有指令都是form开头,如果指令以name结尾,不需要属性绑定语法的[],
只需要一个属性的名字即可。否则,需要绑定语法的[],绑定到属性上;以name结尾的指令只能用在formGrouop指令覆盖的范围内

【小结】

①不管是那种表单,都有一个对应的数据模型来存储表单的数据。在模板式表单中,数据模型是由angular基于组件模板中的指令隐式创建的。而在响应式表单中,通过编码明确的确定创建数据模型,然后将模板上的HTML元素与底层的数据模型联系在一起。

②数据模型并不是一个任意的对象,它是由一个angular/forms模块中的一些特定的类,如FromControl FormGroup FormArray等组成的。在模板式表单中,你不能直接访问到这些类。

③响应式表单并不会替你生成HTML,模板仍需要自己来编写

扫描二维码关注公众号,回复: 6210813 查看本文章

④调用表单需要引用 FormsModule,ReactiveFormsModule
import {FormsModule, ReactiveFormsModule} from ‘@angular/forms’;

3.数据模型

数据模型是保存数据表单数据的数据结构,由FormControl(构成表单的基本单位,通常用来代表一个input或更复杂的ul组件,与HTML相关联的当前的值以及与之相关联的元素的状态,元素是否被修改过等信息)
FormGroup既可以代表表单的一部分,也可以代表整个表单,它是多个FormControl的集合,如果一个FormControl无效,则整个FormGroup无效;在管理多个相关联字段时非常方便,例如开始日期-结束日期;代表整个表单、固定子集
FormArray代表可以增长的字段集合,例如Email

4.状态字段

touched untouched:控制错误信息是否现实;字段是否获取过焦点,如果任一个字段是touched,所有的都是toched,只有所有是untouched,才是untouched.
pristine dirty:字段的值是否变过 任意一个字段是Dirty,所有字段都是Dirty,pristine反之
pending:为true时,正在校验

模板式表单:容易使用 配置简单 开发更快 适应简单场景
响应式表单: 容易测试 灵活性 为表单提供更多控制 可以适配多个渲染器;
开发出来的表单,既可以和HTML表单挂接起来,也可以和手机代码开发的表单挂接起来

(二)与服务器通讯(.web socked)

1.是什么

WebSocket协议是基于TCP的一种新的网络协议。它实现了浏览器与服务器全双工(full-duplex)通信–允许服务器主动发送信息给客户端。

在这里插入图片描述
2.web socked (与http相比)优点

①web socked 可以双向传递(可以同时请求和传递)
②延迟低 长连接 =>不需要的每次请求时,携带连接信息
③通信时,传递的数据少,更简洁和高效
④客户端、服务器都可以主动发送请求,不需要请求
⑤NodeJs和Express创建web服务器时非常简单

(三)构建与部署

1.构建:编译和合并 ng build
2.部署:与服务器整合

index.html import * as path from 'path';
app.use('/',express.static(paht.join(_dirname,'..','client')))

app.module
provides:{provide:LocationStrategy, userClass:HashLocationStrategy}

3.多环境:一套代码支持多种环境

猜你喜欢

转载自blog.csdn.net/a954553391/article/details/88978508