在Angular6中,使用NG-ZRROR作为前端开发框架,在进行表单开发时遇到了一些问题,最后解决了,在此记录。

  

  1.表单构造:

  引入forms:

import { FormGroup, FormBuilder, Validators, FormControl, ValidationErrors } from '@angular/forms';

  在form标签下初始化表单:

  

 <form nz-form [nzLayout]="'inline'" (ngSubmit)="getData()" class="search__form">

  其中 [nzLayout]是初始化布局,(ngSubmit)="getData()" 是事件绑定。

  初始化Input组件:

 <nz-form-item>
<nz-form-label [nzSpan]="7" nzRequired>库位代码</nz-form-label>
<nz-form-control [nzSpan]="12" nzHasFeedback>
<input nz-input formControlName="locationCode" placeholder="库位代码">
<nz-form-explain
*ngIf="locationForm.get('locationCode').dirty && locationForm.get('locationCode').errors || locationForm.get('locationCode').pending ">
<ng-container *ngIf="locationForm.get('locationCode').hasError('required')">
请输入库位代码!
</ng-container>
<ng-container *ngIf="locationForm.get('locationCode').hasError('duplicated')">
库位代码不存在!
</ng-container>
<ng-container *ngIf="locationForm.get('locationCode').pending">
正在查询...
</ng-container>
</nz-form-explain>
</nz-form-control>
</nz-form-item>

  是这个吊样子的,一个JB输入框要劳资写这么多东西。

  nzRequired表示必填项,会在input左边出现红色的*,nzHasFeedback是错误的小红叉。

  

 

  

 nz-form-explain:

nz-form-explaincomponent#

用于显示提示信息,会自动根据当前的 nzValidateStatus 显示不同的颜色

注意:每个 nz-form-item 下最多只能有一个 nz-form-explain

nz-form-extracomponent#

用于显示表单额外提示信息

nz-form-splitcomponent#

用于显示分隔符 -

nz-form-textcomponent#

nz-form-control 中直接显示文本

  

  2.后端初始化

  每一个item里面都会包含一个控制器,formControlName 对应后端构造器中的:

  

//构造器中注入LocationService和Location类
constructor(private fb: FormBuilder, private msg: NzMessageService, private locationService: LocationService, location: Location) {
this.locationForm = this.fb.group({
locationCode: ['', [Validators.required], [this.userNameAsyncValidator]],
locationDesc: ['', [Validators.required]],
Mrp: ['', [Validators.required]],
block: ['', [Validators.required]],
locationType: ['', [Validators.required]],
effective: true,
negativeStock: false,
freeze: false,
});
this.requestBody = location;
}

  [Validators.required]表示必填验证,第三个参数是自定义验证器。

  提交表单需要验证数据,循环获取每一个控件的控制器,在进行判断:

  

  


  //提交表单
submit(): void {
let isError = false;
for (const i in this.locationForm.controls) {
this.locationForm.controls[i].markAsDirty();
this.locationForm.controls[i].updateValueAndValidity();
if(this.locationForm.controls[i].invalid){
isError = true;
for (const i in this.locationForm.controls) {
this.locationForm.controls[i].markAsDirty();
this.locationForm.controls[i].updateValueAndValidity();
}
break;
}else{
isError = false;
}
}
if(!isError){
this.requestBody.locationCode = this.locationForm.controls['locationCode'].value;
this.requestBody.locationDesc = this.locationForm.controls['locationDesc'].value;
this.requestBody.mrp = this.locationForm.controls['Mrp'].value;
this.requestBody.locationType = this.locationForm.controls['locationType'].value;
this.requestBody.block = this.locationForm.controls['block'].value;
this.requestBody.effective = this.locationForm.controls['effective'].value;
this.requestBody.negativeStock = this.locationForm.controls['negativeStock'].value;
this.requestBody.freeze = this.locationForm.controls['negativeStock'].value;
this.locationService.insertLocation(this.apiUrl, this.requestBody);
}else{
//表单有错误
}
}
 

  在LocationService里面进行请求数据:

  

httpOptions = {
headers: new HttpHeaders(
{
'Content-Type': 'application/json'},
),
};
public insertLocation(url,requestBody): any{
this.http.post(url, requestBody,this.httpOptions).subscribe(
data=>{
console.log(JSON.stringify(data));
this.router.navigateByUrl("location")
},
error1 => {
console.log(JSON.stringify(error1));
}
)
}
 

  将对象传入,加入请求头,就ok了。

  SpringBoot后端接收。

  


@RestController
@RequestMapping("/location")
@Api(tags = "库位", value = "TEST")
public class LocationController { private Gson gson = new Gson(); @Resource
private LocationDao locationDao; @ApiOperation(value = "添加库位信息", notes = "添加一个库位")
@PostMapping("/insertLocation")
public @ResponseBody
String insertLocation(@RequestBody Location location) { System.out.println("[LOCATION]:"+location);
location.setId(0);
location.setFactory("PO1");
location.setMrpFactory("P01A");
locationDao.insert(location);
return gson.toJson(new RestMessage("success","400",null));
}
 

  为Demo版,比较随意。

  

Angualr6表单提交验证并跳转的更多相关文章

  1. amazeUI表单提交验证--input框required

    效果: html: <!DOCTYPE html> <html> <head> <meta charset="utf-8"> < ...

  2. 通过jquery实现form表单提交后不跳转页面,保留当前页面

    jquery代码: <script type="text/javascript" src="../js/jquery-1.8.3.min.js">& ...

  3. 原生JS 表单提交验证器

    转载:http://www.cnblogs.com/sicd/p/4613628.html 一.前言 最近在开发一个新项目,需要做登陆等一系列的表单提交页面.在经过“缜密”的讨论后,我们决定 不用外部 ...

  4. aspx中的表单验证 jquery.validate.js 的使用 以及 jquery.validate相关扩展验证(Jquery表单提交验证插件)

    这一期我们先讲在aspx中使用 jquery.validate插件进行表单的验证, 关于MVC中使用 validate我们在下一期中再讲     上面是效果,下面来说使用步骤 jQuery.Valid ...

  5. CodeIgniter典型的表单提交验证代码

    view内容: <?php echo form_open('user/reg'); ?> <h5>用户名</h5> <input type="tex ...

  6. jsp 表单提交,服务器跳转方法 浏览器重定向 及 servlet映射时 路径问题

    在jsp页面中,等提交表单数据时,最好用觉得路径. 写法如下: <form action ="<%=request.getContextPath()%>/do_login. ...

  7. DEDECMS自定义表单提交后的跳转链接修改方法

    dedecms自定义表单,点击提交后,默认跳转到首页,我们打开plus/diy.php,里面有这样一段代码: 代码如下:if($dsql->executenonequery($query)) { ...

  8. destoon 信息发布表单提交验证

    sell 模块的form表单如下: <form method="post" id="dform" action="?" target= ...

  9. form 表单提交数据 不跳转解决办法

    1.  利用隐藏的 iframe —— 只需form的 target 指向iframe的name:可不用form 的action默认提交,自己写ajax 提交数据. <html> < ...

随机推荐

  1. springboot使用RabbitMQ实现延时任务

    延时队列顾名思义,即放置在该队列里面的消息是不需要立即消费的,而是等待一段时间之后取出消费.那么,为什么需要延迟消费呢?我们来看以下的场景 订单业务: 在电商/点餐中,都有下单后 30 分钟内没有付款 ...

  2. Modbus RTU新版本指令介绍

    Modbus RTU新版本指令介绍 TIA V13 SP1版本软件中提供了2个版本的Modbus RTU指令: 图1. 两个版本Modbus RTU指令 早期版本的Modbus RTU指令(图1. 中 ...

  3. 西门子PLC中各个组织块OB作用(OB1、OB100……)

    1.自由循环组织块OB1 S7  CPU启动完成后,操作系统循环执行OB1,OB1执行完成后,操作系统再次启动OB1.在OB1中可以调用FB.SFB.FC.SFC等用户程序使其循环执行.除OB90以外 ...

  4. Elasticsearch实战总结

    上手elasticsearch有段时间了,主要以应用为主,未做深入的研究,下面就简单的日常作个简单的总结,做个记录. 版本问题 es版本繁杂,让首次使用的人无从下手.常见的有2+.5+版本,最新版已达 ...

  5. redis快速部署

    1. 场景描述 以前是直接使用公司提供的redis集群,只使用不负责维护,因项目用到负载均衡,需要使用redis做session共享,存储session信息,所以就部署了下,记录下以便后续能快速部署. ...

  6. .NET多线程之调用上下文CallContext

    命名空间:System.Runtime.Remoting.Messaging 类型完全限定名称:System.Runtime.Remoting.Messaging.CallContext 官方介绍:h ...

  7. Android问题解决

    1.clean之后R文件消失 clean之后R文件消失是因为布局的XML文件存在错误,无法编译你的资源文件,所以无法自动生成R文件,在Problem.LogCat等界面查看错误的原因,把错误改正即可: ...

  8. GeoPackage - 一个简便轻量的本地地理数据库

    GeoPackage(以下简称gpkg),内部使用SQLite实现的一种单文件.与操作系统无关的地理数据库. 当前标准是1.2.1,该版本的html版说明书:https://www.geopackag ...

  9. vue-cli3.x中使用axios发送请求,配合webpack中的devServer编写本地mock数据接口(get/post/put/delete)

    vue-cli3.x中使用axios发送请求,配合webpack中的devServer编写本地mock数据接口(get/post/put/delete) 手把手式笔记 Axios配置 安装 axios ...

  10. C#8.0 新增功能

    连载目录    [已更新最新开发文章,点击查看详细] C#8.0提供了许多增强功能 01 Readonly 成员 可将 readonly 修饰符应用于结构的任何成员. 它指示该成员不会修改状态. 这比 ...