zoukankan      html  css  js  c++  java
  • angular2表单 常用

    动态表单

    1、表单验证

    在表单提交时,进行手动判断每一项的验证

    submit(){
      for (const i in this.validateForm.controls) { 
        this.validateForm.controls[i].markAsDirty();
        this.validateForm.controls[i].updateValueAndValidity(); 
      }
      // this.validateForm.valid 表单是否通过验证
      if(this.validateForm.valid){
        // 执行提交
      }else {
        // 提示
      }
    }

    2、表单关联绑定(valueChange),取消绑定

    // 绑定
    const vc = this.addForm.controls.psid.valueChanges.subscribe(val => {
          // 执行事件
        });
    
    // 取消绑定
    vc.unsubscribe();

    3、表单重新定义验证

    // 每项重置完后都需要执行updateValueAndValidity(),更新controls,才能生效
    
    // 设置为必填项
    this.addForm.controls.fuelName.setValidators([Validators.required]);
    this.addForm.controls.fuelName.updateValueAndValidity();
    
    // 设置为无验证
    this.addForm.controls.fuelName.setValidators(null);
    this.addForm.controls.fuelName.updateValueAndValidity();

    4、表单设置禁用

    // 通常写法
    this.psForm = this.fb.group({
        psName: ['', []],
        psCode: ['', []]
    })
    
    // 需要禁用的写法
    this.psForm = this.fb.group({
        psName: [{value: '', disabled: true}, []],
        psCode: [{value: '', disabled: true}, []]
    });
    
    // 通常获取表单value对象
    const valObj = this.psForm.value;
    
    // 禁用后获取表单value对象
    const valObj = this.psForm.getRawValue();

    5、表单重新定义是否禁用

    this.psForm.controls[key].reset({value: '123', disabled: true});

     6、表单提交触发验证时,会自动触发表单的valueChanges事件,解决方法:

     Object.keys(this.addForm.controls).forEach(key => {
                  this.addForm.controls[key].markAsDirty();
                  this.addForm.controls[key].updateValueAndValidity({
                    emitEvent: false // 此项配置为true或默认不传,会默认触发表单项的valueChanges事件,若为false,则不触发
                  });
                });

     7、使用 this.addForm.value 获取不到禁用的表单项,

    可以通过表单的 getRowValue() 方法获取全部表单项

  • 相关阅读:
    iOS 新建xib文件时,最外层view的约束问题
    React native 无法弹出调试控件的问题
    从GitHub下载demo时遇到的依赖问题
    Mac 解决 Sourcetree 同步代码总需要密码的问题
    Mac 安装JRE 1.8
    正则表达式-- (.*?) 或 (.*+)
    字符串内有多个#号,每俩#号为一组,JavaScript 截取每组#号之间的字符
    Js/jQuery实时监听input输入框值变化
    Redis设置密码
    redis本机能访问 远程不能访问的问题
  • 原文地址:https://www.cnblogs.com/jing5990/p/12331266.html
Copyright © 2011-2022 走看看