亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

響應式表單之操作表單

Get() 方法

根据名称(或者路径)获取子表单或字段。

例子:

// form.component.ts

ngOnInit() {

  this.myGroup = this.fb.group({
    name:'吴蕾',
    childGroup:this.fb.group({
      sex:'女'
    })
    
  });

  // 根据名称获取字段
  const nameControl = this.myGroup.get('name'); 

  // 根据路径获取子表单的字段
  const sexControl = this.myGroup.get('childGroup.sex');
  // 下面的写法也可以:
  // const sexControl2 = this.myGroup.get(['childGroup', 'sex']);

  console.log(nameControl); // formControl 对象
  console.log(sexControl); // fFormControl 对象

}

Value 属性

对于 FormControl,指向当前字段的值。

例子:

// form.component.ts

ngOnInit() {

  this.myGroup = this.fb.group({
    name:'吴蕾',
    age:'20',
    sex:'1'
  });

  // 获取字段值
  const nameControlValue = this.myGroup.get('name')?.value; 

  console.log(nameControlValue); // 吴蕾

}

对于 FormGroup,指向键值对组成的对象。

例子:

// form.component.ts

ngOnInit() {

  this.myGroup = this.fb.group({
    name:'吴蕾',
    age:'20',
    sex:'1'
  });

  // 获取表单对象
  const nameGroupValue = this.myGroup?.value; 

  console.log(nameGroupValue); // {name: '吴蕾', age: '20', sex: '1'}

}

ValueChanges() 方法

对于 FormControl,监听单个字段值的变化,并返回最新值。

例子:

图片描述

// form.component.ts

ngOnInit() {

  this.myGroup = this.fb.group({
    name:'吴蕾',
    age:'20',
    sex:'1'
  });

    // 监听字段值的变化
  this.myGroup.get('name')?.valueChanges.subscribe((value: string)=>{

    // 参数 value 指向最新值
    console.log(value); // 张三

  });

}

对于 FormGroup,监听组内每个字段值的变化,并返回最新的对象。

例子:

图片描述

// form.component.ts

ngOnInit() {

  this.myGroup = this.fb.group({
    name:'吴蕾',
    age:'20',
    sex:'1'
  });

    // 监听表单中每个字段值的变化
  this.myGroup?.valueChanges.subscribe((value: string)=>{

    // 参数 value 指向最新键值对组成的对象
    console.log(value); // {name: '张三', age: '30', sex: '0'}

  });

}

SetValue() 与 PatchValue() 方法

对于 FormControl,SetValue() 与 PatchValue() 都可以为字段设置新值,用法一致。

例子:

图片描述

// form.component.ts

ngOnInit() {

  this.myGroup = this.fb.group({
    name:'吴蕾',
    age:'20',
    sex:'1'
  });

}

clear(){
  // 清空 name 字段值
  this.myGroup.get('name')?.setValue('');
  // this.myGroup.get('name')?.patchValue('');
  
  console.log(this.myGroup.value); // {name: '', age: '20', sex: '1'}
}

对于 FormGroup,SetValue() 必须严格遵循表单的结构,并整体性替换为新对象,而 PatchValue() 可以对任意键值对进行替换。

例子:

图片描述

// form.component.ts

ngOnInit() {

  this.myGroup = this.fb.group({
    name:'吴蕾',
    age:'20',
    sex:'1'
  });

}

clear(){
  // setValue() 整体性替换为新对象,不可以缺少任何字段
  // this.myGroup?.setValue({
  //   name:'',
  //   age:'20',
  //   sex:'0'
  // });

  // patchValue() 只替换我们需要替换的键值对即可
  this.myGroup?.patchValue({
    name:'',
    sex:'0'
  });

  console.log(this.myGroup.value); // {name: '', age: '20', sex: '0'}
}

*综上所述,在实际工作中,通常使用 FormControl 的 SetValue() 方法为字段设置新值,使用 FormGroup 的 PatchValue() 方法对键值对进行替换。

Disable() 与 Enable() 方法

对于 FormControl,Disable() 与 Enable() 分别对应着禁用和启用单个字段。

例子:

图片描述

// form.component.ts

ngOnInit() {

  this.myGroup = this.fb.group({
    name:'吴蕾',
    age:'20',
    sex:'1'
  });

}

// 禁用函数
disableFn(){
  this.myGroup.get('name')?.disable();
  console.log(this.myGroup.value); // {age: '20', sex: '1'}
}

// 启用函数
enableFn(){
  this.myGroup.get('name')?.enable();
  console.log(this.myGroup.value); // {name: '吴蕾', age: '20', sex: '1'}
}

*值得注意的是,当我们禁用某个字段时,this.myGroup 对象里也排除了这个键值对,不仅如此,该字段的验证器也会被忽略。

对于 FormGroup,Disable() 与 Enable() 分别对应着禁用和启用整个表单。

例子:

图片描述

// form.component.ts

ngOnInit() {

  this.myGroup = this.fb.group({
    name:'吴蕾',
    age:'20',
    sex:'1'
  });

}

// 禁用函数
disableFn(){
  this.myGroup?.disable();
  console.log(this.myGroup.value); // {name: '吴蕾', age: '20', sex: '1'}
}

// 启用函数
enableFn(){
  this.myGroup?.enable();
  console.log(this.myGroup.value); // {name: '吴蕾', age: '20', sex: '1'}
}

事件发射器

FormControl 和 FormGroup 都带有事件发射器( emitEvent ),当我们调用 SetValue()、PatchValue()、Disable()、Enable() 等方法时,ValueChanges() 就会监听到这个发射器,并执行相应的程序。

例子:

图片描述

// form.component.ts

ngOnInit() {

  this.myGroup = this.fb.group({
    name:'吴蕾',
    age:'20',
    sex:'1'
  });

  // 监听到 name 发生变换,修改 age 和 sex 的值
  this.myGroup.get('name')?.valueChanges.subscribe((value:string)=>{
    this.myGroup?.patchValue({
      age:'',
      sex:'0'
    });
  });

}

// 清空姓名函数
clearName(){
  this.myGroup.get('name')?.setValue('');
}

如果我们不想让 ValueChanges() 监听到这个发射器,可以设置 emitEvent 为 false。

例子:

图片描述

// form.component.ts

ngOnInit() {

  this.myGroup = this.fb.group({
    name:'吴蕾',
    age:'20',
    sex:'1'
  });

  this.myGroup.get('name')?.valueChanges.subscribe((value:string)=>{
    this.myGroup?.patchValue({
      age:'',
      sex:'0'
    });
  });

}

// 清空姓名函数
clearName(){
  this.myGroup.get('name')?.setValue('', { emitEvent: false });
}

end

點擊查看更多內容
TA 點贊

若覺得本文不錯,就分享一下吧!

評論

作者其他優質文章

正在加載中
Web前端工程師
手記
粉絲
1.4萬
獲贊與收藏
860

關注作者,訂閱最新文章

閱讀免費教程

  • 推薦
  • 評論
  • 收藏
  • 共同學習,寫下你的評論
感謝您的支持,我會繼續努力的~
掃碼打賞,你說多少就多少
贊賞金額會直接到老師賬戶
支付方式
打開微信掃一掃,即可進行掃碼打賞哦
今天注冊有機會得

100積分直接送

付費專欄免費學

大額優惠券免費領

立即參與 放棄機會
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號

舉報

0/150
提交
取消