Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 通知父项其子项发生更改_Javascript_Angular - Fatal编程技术网

Javascript 通知父项其子项发生更改

Javascript 通知父项其子项发生更改,javascript,angular,Javascript,Angular,我在Angular 2上制作一个带有动态验证的嵌套表单。我有一个父组件(finalizanegociacaomponent),它保存嵌套表单和其他属性,还有一个组件dadosTitular,它是嵌套表单。在嵌套表单中,我有一个调用函数的复选框,该函数更改表单中的一些输入。我想知道我是如何让父级finalizanegociacao组件意识到表单上发生了更改的 这是复选框调用的函数(位于dadosTitularComponent中): handleType(isJuridica: boolean,

我在Angular 2上制作一个带有动态验证的嵌套表单。我有一个父组件(
finalizanegociacaomponent
),它保存嵌套表单和其他属性,还有一个组件
dadosTitular
,它是嵌套表单。在嵌套表单中,我有一个调用函数的复选框,该函数更改表单中的一些输入。我想知道我是如何让父级
finalizanegociacao组件
意识到表单上发生了更改的

这是复选框调用的函数(位于
dadosTitularComponent
中):

handleType(isJuridica: boolean, i:number): void {
  let array = <FormArray> this.formDadosBancarios.get('dados_titular');
  let cpf = array.at(0).get("cpf");
  let cnpj = array.at(0).get('cnpj');
  let data_nasc = array.at(0).get('data_nasc');
  const cpfCtrl = this.formDadosBancarios.get(['dados_titular',0,'cpf']);
  const cnpjCtrl = this.formDadosBancarios.get(['dados_titular',0, 'cnpj']);
  const data_nascCtrl = this.formDadosBancarios.get(['dados_titular',0,'data_nasc']);
  const reqValidators: ValidatorFn[] = [Validators.required, Validators.pattern(this.cpf_REGEXP)];
  if (isJuridica) {
    cpfCtrl.setValidators(null);
    data_nascCtrl.setValidators(null);
    cnpjCtrl.setValidators(reqValidators);
  }else{
    cpfCtrl.setValidators(reqValidators);
    data_nascCtrl.setValidators(reqValidators)
    cnpjCtrl.setValidators(null);
  }
  cpfCtrl.updateValueAndValidity();
  data_nascCtrl.updateValueAndValidity();
  cnpjCtrl.updateValueAndValidity();
}
handleType(isJuridica:boolean,i:number):无效{
让数组=this.formDadosBancarios.get('dados_titular');
设cpf=array.at(0.get)(“cpf”);
设cnpj=array.at(0.get('cnpj');
让data_nasc=array.at(0).get('data_nasc');
const cpfCtrl=this.formDadosBancarios.get(['dados_titular',0,'cpf']);
const cnpjCtrl=this.formDadosBancarios.get(['dados_titular',0,'cnpj']);
const data_nacctrl=this.formDadosBancarios.get(['dados_titular',0,'data_nasc']);
const reqValidators:ValidatorFn[]=[Validators.required,Validators.pattern(this.cpf_REGEXP)];
如果(isJuridica){
cpfCtrl.setValidators(空);
数据校验器(空);
cnpjCtrl.setValidators(需求确认器);
}否则{
cpfCtrl.setValidators(需求确认器);
数据校验器(reqValidators)
cnpjCtrl.setValidators(空);
}
cpfCtrl.updateValueAndValidity();
data_nacctrl.updateValue和validity();
cnpjCtrl.updateValueAndValidity();
}

因此,这个函数设置并从一些输入中删除验证器,问题是,
finalizanegociacaomponent
从未“意识到”。我如何更新它?我猜它与ngOnchages有关,但我仍然很迷茫:(.Thank

有多种方法可以将子组件中的更改通知父组件。例如,在子组件
dadosTitularComponent
中,可以实现一个
输出
参数,该参数在模型更改时发出更新值:

@Output() modelChanged = new EventEmitter();
然后,您可以让事件发射器通过复选框调用的
handleType
函数发出一个值:

this.modelChanged.emit(someValue);
someValue
将通过输出变量
modelChanged
发送到父级

父组件可以使用侦听器侦听
modelChanged
事件

<app-dadosTitularComponent (modelChanged)="someFunction($event)"></app-dadosTitularComponent>

非常感谢Tyler,我只是不明白什么是
somevalue
,因为你可以看到我没有向父组件返回一个值。我返回的是一些输入的更改。此外,this.modelChanged.emit(somevalue)“`将位于
handletype
的末尾?
someValue
可以是任何东西。如果您愿意,它可以是您的整个模型,而不仅仅是一个值。是的,我会将
this.modelChanged.emit(…)
放在
handletype
的末尾。谢谢泰勒,您真的帮助了我:)很高兴我能帮上忙。
ngOnChanges(changes: SimpleChanges) {
    console.log(changes['myInput'].currentValue);
}