首页 > 其他分享 >Angular:表单设置动态校验规则(ngZorro示例)

Angular:表单设置动态校验规则(ngZorro示例)

时间:2023-08-23 23:45:04浏览次数:47  
标签:示例 nickname required validateForm Angular import get ngZorro angular

背景

有时我们需要根据不同的条件,决定表单控件是否是必填的。

代码示例

HTML文件

<form nz-form [formGroup]="validateForm" (ngSubmit)="submitForm()">
  <nz-form-item>
    <nz-form-label [nzSpan]="4" nzRequired nzFor="name">Name</nz-form-label>
    <nz-form-control [nzSpan]="8" nzErrorTip="Please input your name">
      <input type="text" nz-input formControlName="name" placeholder="Please input your name" />
    </nz-form-control>
  </nz-form-item>
  <nz-form-item>
    <nz-form-label [nzSpan]="4" nzFor="nickname" [nzRequired]="validateForm.get('required')?.value">Nickname</nz-form-label>
    <nz-form-control [nzSpan]="8" nzErrorTip="Please input your nickname">
      <input type="text" nz-input formControlName="nickname" placeholder="Please input your nickname" />
    </nz-form-control>
  </nz-form-item>
  <nz-form-item>
    <nz-form-control [nzSpan]="8" [nzOffset]="4">
      <label nz-checkbox formControlName="required" (ngModelChange)="requiredChange($event)">Nickname is required</label>
    </nz-form-control>
  </nz-form-item>
  <nz-form-item>
    <nz-form-control [nzSpan]="8" [nzOffset]="4">
      <button nz-button nzType="primary">Check</button>
    </nz-form-control>
  </nz-form-item>
</form>

TS文件

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

@Component({
  selector: 'app-rule-validation',
  templateUrl: './rule-validation.component.html',
  styleUrls: ['./rule-validation.component.css']
})
export class RuleValidationComponent implements OnInit {
  validateForm!: FormGroup;

  submitForm(): void {
    for (const i in this.validateForm.controls) {
      this.validateForm.controls[i].markAsDirty();
      this.validateForm.controls[i].updateValueAndValidity();
    }
  }

  requiredChange(required: boolean): void {
    if (!required) {
      this.validateForm.get('nickname')!.clearValidators();
      this.validateForm.get('nickname')!.markAsPristine();
    } else {
      this.validateForm.get('nickname')!.setValidators(Validators.required);
      this.validateForm.get('nickname')!.markAsDirty();
    }
    this.validateForm.get('nickname')!.updateValueAndValidity();
  }

  constructor(private fb: FormBuilder) { }

  ngOnInit() {
    this.validateForm = this.fb.group({
      name: [null, [Validators.required]],
      nickname: [null],
      required: [false]
    });
  }

}

module文件

import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { RuleValidationComponent } from './rule-validation.component';
import { NzFormModule } from 'ng-zorro-antd/form';
import { FormsModule, ReactiveFormsModule } from "@angular/forms";
import { NzInputModule } from 'ng-zorro-antd/input';
import { NzButtonModule } from 'ng-zorro-antd/button';
import {NzCheckboxModule} from "ng-zorro-antd/checkbox";
import {BrowserAnimationsModule} from "@angular/platform-browser/animations";

@NgModule({
  imports: [
    CommonModule,
    NzFormModule,
    FormsModule,
    ReactiveFormsModule,
    NzInputModule,
    NzButtonModule,
    NzCheckboxModule,
    BrowserAnimationsModule
  ],
  declarations: [RuleValidationComponent],
  exports:[RuleValidationComponent]
})
export class RuleValidationModule { }

效果图

image

参考链接

https://ng.ant.design/version/11.4.x/components/form/zh#components-form-demo-dynamic-rule

标签:示例,nickname,required,validateForm,Angular,import,get,ngZorro,angular
From: https://www.cnblogs.com/leoych/p/17653048.html

相关文章

  • 论文解读 | 解释和利用对抗性示例
    原创|文BFT机器人摘要ABSTRACT这篇论文研究了神经网络和其他机器学习模型在错误分类对抗性示例方面的问题。对抗性示例是通过对数据中的示例应用微小但故意的扰动来生成的,导致模型输出错误答案。以往的解释主要集中在非线性和过拟合上,然而,本文提出了一种不同的观点,认为神经网络......
  • k8s挂载示例
    apiVersion:apps/v1kind:Deploymentmetadata:name:tongwebspec:selector:matchLabels:app:tongwebreplicas:1template:metadata:labels:app:tongwebspec:containers:-name:tongweb......
  • dockerfile netcore 示例
    #syntax=docker/dockerfile:1FROMmcr.microsoft.com/dotnet/sdk:7.0asbuild-envWORKDIR/appCOPY..RUNdotnetrestoreRUNdotnetpublish-cRelease-o/publishFROMmcr.microsoft.com/dotnet/aspnet:7.0asruntimeWORKDIR/srcCOPY--from=build......
  • java实现大文件上传示例
    ​ 一、功能性需求与非功能性需求要求操作便利,一次选择多个文件和文件夹进行上传;支持PC端全平台操作系统,Windows,Linux,Mac支持文件和文件夹的批量下载,断点续传。刷新页面后继续传输。关闭浏览器后保留进度信息。支持文件夹批量上传下载,服务器端保留文件夹层级结构,服务器端......
  • 用一个示例来学习DockerFile
    在Docker的世界里,我们经常会听到Dockerfile这个词。那么,什么是Dockerfile?它如何工作?本文将简要介绍Dockerfile的基本概念,原理以及一些常用的Dockerfile命令。什么是Dockerfile?Dockerfile是一个包含了一组命令的文本文件,这些命令可以被Docker解析并依此构建出一个新的Docker镜像......
  • 如何创建一个数据交互的Angular应用程序?这个工具不要错过!(一)
    当我们构建带有数据的应用程序时,需要为客户提供排序、分组、过滤和聚合数据等选项,以便与之交互。我们可以通过多种途径实现这一目标:使用内置的Array对象——它提供了过滤器、排序方法和reduce等用于分组和聚合的功能。使用KendoUIforAngular强大的数据查询功能——它提供了......
  • iwebsec-xss 04 xss修复示例
    01、题目分析这一题就不是解题了,是教如何实现防范xss漏洞的,因此我们重点分析源码,是如何实现防范xss的02、xss按照第一关的xss方式去访问,可以明显发现没有出弹窗,而是把js代码作为文字输出到界面上03、源码分析<?phprequire_once'../header.php';?><html> <head> <titl......
  • 浅谈Angular模板指令:ng-template和ng-container的用法
    本篇文章带大家简单了解一下Angular模板的ng-template和ng-container指令,介绍一下ng-template和ng-container指令使用方法。ng-template指令简介ng-template是一个Angular结构型指令,用来渲染HTML。它永远不会直接显示出来。事实上,在渲染视图之前,Angular会把ng-template......
  • Prim算法是一种用于解决最小生成树问题的贪心算法。它通过逐步选择边来构建最小生成树
    importjava.util.*;classPrimAlgorithm{privatestaticfinalintINF=Integer.MAX_VALUE;publicvoidprimMST(int[][]graph){intvertices=graph.length;int[]parent=newint[vertices];//用于存储最小生成树的父节点int......
  • 二、原生 API 的注解使用示例
    [email protected](METHOD)@Retention(RUNTIME)public@interfaceRequestLine{//请求方式+uriStringvalue();//斜线是否base64编码booleandecodeSlash()defaulttrue;//默认支持URL传多值,是通过key来传输的。形如:key=value1&......