angular6 表单验证

   2023-02-08 学习力0
核心提示:这里使用的是模型驱动的表单1、app.module.tsimport { ReactiveFormsModule } from '@angular/forms'; @NgModule({...imports: [ReactiveFormsModule, ...],...})export class AppModule{}文件中加入了ReactiveFormsModule模块,它是使用模型驱动表单所必须的

这里使用的是模型驱动的表单

1、app.module.ts

import { ReactiveFormsModule } from '@angular/forms';
 
@NgModule({
  ...
  imports: [ReactiveFormsModule, ...],
  ...
})
export class AppModule{
}

文件中加入了ReactiveFormsModule模块,它是使用模型驱动表单所必须的。

 

2、app.component.ts

import { Component, OnInit } from '@angular/core';
import { FormGroup, FormControl, Validators } from '@angular/forms';

@Component({
  selector: 'app-root',
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.css']
})
export class AppComponent implements OnInit {
  name: string
  score: number;
  formData: any;

  constructor() { }

  ngOnInit() {
    this.formData = new FormGroup({
      name: new FormControl(this.name, Validators.compose([
        Validators.required,
      ])),
      score: new FormControl(this.score, Validators.compose([
        Validators.required,
        this.scoreValueValidator
      ]))
    });
  }

  scoreValueValidator(control: FormControl): any {
    if (control.value < 0 || control.value > 100) {
      return { value: {info: '分数必须大于等于0,小于等于100'} };
    }
  }

  onsubmit(data: any) {
    this.name= data.name;
    this.score = data.score
  }

}

表单验证,可以使用内置的表单验证,也可以使用自定义验证方法。

(1)  内置表单验证。

Validators是angular内置的验证器模块,可以使用它实现强制字段、最小长度、最大长度和模式等,我这里设置了name和score是强制字段,当然,你可以加入Validators.minLength(6), Validators.maxLength(10),Validators.pattern("[^ @]*@[^ @]*")等等

(2)  自定义表单验证。

scoreValueValidator是自定义的验证方法,用于验证分数是否大于等于0,小于等于100,传递的参数是当前需要验证的表单的FormControl,通过control.value可以拿到输入的分数值。

 

3、app.component.html

<div class="container">
  <form [formGroup] = "formData" (ngSubmit) = "onsubmit(formData.value)">
    <div class="form-group">
      <label for="name">姓名</label>
      <em>*</em>
      <input type="text" class="form-control" formControlName="name" >
      <div [hidden]="formData.get('name').valid || formData.get('name').untouched" class="small">
        <p [hidden]="!formData.hasError('required', 'threshold')">必填项</p>
      </div>
    </div>
    <div class="form-group">
      <label for="score">分数</label>
      <em>*</em>
      <input type="number" min="0" max="100" class="form-control" formControlName="score" >
      <div [hidden]="formData.get('score').valid || formData.get('score').untouched" class="small">
        <p [hidden]="!formData.hasError('required', 'score')">必填项</p>
        <p [hidden]="!formData.hasError('value', 'score')">{{formData.getError('value', 'score')?.info}}</p>
      </div>
    <button type="submit" [disabled]="!formData.valid" class="btn btn-sm btn-primary">提交</button>
  </form>
</div>

页面中显示错误信息

对于提交按钮,我们已经在方括号中添加了disabled,它被赋予值 !formData.valid。因此,如果formData.valid无效,按钮将保持禁用状态,用户将无法提交它。

 

4、app.component.css

em {
    color:red;
    margin-left: 0.25em
}
.ng-touched:not(form),.ng-invalid:not(form) {
    border: 1px solid #f00;
}
.ng-valid:not(form),.ng-untouched:not(form) {
    border: 1px solid #ddd;
}
p{
    color:#f00;
}

 

 
反对 0举报 0 评论 0
 

免责声明:本文仅代表作者个人观点,与乐学笔记(本网)无关。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
    本网站有部分内容均转载自其它媒体,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责,若因作品内容、知识产权、版权和其他问题,请及时提供相关证明等材料并与我们留言联系,本网站将在规定时间内给予删除等相关处理.

  • Angular.js的作用域和数据绑定
    初识Angular.js通过初识Angular.js可以做一个简单的入门,下面开始做深入的了解吧。作用域作用域($scope)和应用的数据模型相关联的,同时作用域也是表达式执行的上下文。$scope对象是定义应用业务逻辑、控制器方法和视图属性的地方。 作用域是视图和控制器
    03-16
  • Angular 4 设置组件样式的几种方式
    Angular 4 设置组件样式的几种方式
      你用Angular吗?一.介绍  如何只改动最简单的css代码,呈现完全不一样的视图效果。第一种:最基本的设置:  图1 代码 图2 界面运行效果图平常,想给一个label或者p等标签添加样式,我们就是这样操作,在Angular中也是一样的。现在,如果我想要将字体换
    03-16
  • angularJSapi学习-angular.copy使用
    angular.copy使用效果:初始状态:输入信息后未保存状态:点击save后状态:当输入框内容和master内容不一致时:点击reset使得user的信息被重置为master中信息: 具体代码: 1 !DOCTYPE HTML 2 html ng-app="app" 3 headscript src="./angular.min.js"/script
    03-16
  • Ionic启动时提示:The Angular CLI requires a minimum Node.js version of eithor v10.13 or v12.0
    Ionic启动时提示:The Angular CLI requires a m
    在新建ionic项目后通过ionic serve 启动ionic项目时提示:The Angular CLI requires a minimum Node.js version of eithor v10.13 or v12.0  注:博客: https://blog.csdn.net/badao_liumang_qizhi 关注公众号霸道的程序猿获取编程相关电子书、教程推送与
    03-16
  • Angular.js之内置过滤器学习笔记 javascript过
    !DOCTYPE htmlhtml lang="en"headmeta charset="UTF-8"titleangularFilter/titlescript src="http://cdn.bootcss.com/angular.js/1.4.6/angular.js"/script/head  body ng-app="angularJS" ng-controller="ctrl"    div{{
    03-08
  • Angular 隨記
    Windows下更新Node 和NPM方法管理員模式打開powershell執行以下命令:Set-ExecutionPolicy Unrestricted -Scope CurrentUser -Forcenpm install -g npm-windows-upgradenpm-windows-upgrade
    03-08
  • 双向数据绑定(angular,vue) 双向数据绑定指令
    最近github上插件项目更新了关于双向数据绑定的实现方式,关于angular和vue.angular众所周知是使用的脏检查($dirty)。一开始大家会认为angular开启了类似setInterval去不停的循环检查,性能极差,但其实并不是,$dirty是在一定条件下才会去执行,比如输入框
    03-08
  • 六、angular 生成二维码
    六、angular 生成二维码
    首先需要安装angular-qrcode :bower install monospaced/angular-qrcodenpm install angular-qrcode如何使用?在相应的需要使用二维码的页面增加如下代码:注意:这里的“version”和"size"可以根据github上面找出自己想要的结果:生成含有图片的二维码:这里
    03-08
  • angular.js简单入门。 angular入门教程
    angular.js简单入门。 angular入门教程
    小弟刚接触angular js  就写了一个简单的入门。后续慢慢补。。。首先看 html 页面。htmlmeta charset="UTF-8"headtitleangularJS/title/headscript type="text/javascript" src="./js/angular.min.js"/script      //引入 angularJSscript type="text/
    03-08
点击排行