Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/390.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/32.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 每当对象内容更改时,角度触发器EventEmitter_Javascript_Angular_Output_Components_Eventemitter - Fatal编程技术网

Javascript 每当对象内容更改时,角度触发器EventEmitter

Javascript 每当对象内容更改时,角度触发器EventEmitter,javascript,angular,output,components,eventemitter,Javascript,Angular,Output,Components,Eventemitter,我使用一个子组件来构建一个由递归子数组和对象组成的复杂对象。我想要一种使用活动绑定在父组件中访问此对象的方法 对象中的值会根据用户输入选择框、输入等进行更改,因此我需要一种方法来发出@Output EventEmitter,并在对象的属性发生更改时传递整个对象 关于如何做到这一点,我有什么想法吗?或者我还有别的办法吗 请参阅下面的一些概念代码,其中输入具有双向数据绑定到复杂对象中的深度值,我需要通过某种方式检测更改,将此更改发送给父级 实际形式更为复杂,因此我希望避免使用特定事件(如观察每个输入

我使用一个子组件来构建一个由递归子数组和对象组成的复杂对象。我想要一种使用活动绑定在父组件中访问此对象的方法

对象中的值会根据用户输入选择框、输入等进行更改,因此我需要一种方法来发出@Output EventEmitter,并在对象的属性发生更改时传递整个对象

关于如何做到这一点,我有什么想法吗?或者我还有别的办法吗

请参阅下面的一些概念代码,其中输入具有双向数据绑定到复杂对象中的深度值,我需要通过某种方式检测更改,将此更改发送给父级

实际形式更为复杂,因此我希望避免使用特定事件(如观察每个输入中的变化)来手动触发事件发射器(如果可能)

父模板:

<child-component (emitter)="emitterHandler($event)"></child-component>
<input [(ngModel)]="complexObj.lines[0].data"></input>
子组件:

emitterHandler(obj){ console.log(obj); }
@Output() emitter: EventEmitter<any> = new EventEmitter();    
complexObj = {data: 'test', lines: [{data: 'asd', time: 123},{data: 'xcv', time: 233}]};
子模板:

<child-component (emitter)="emitterHandler($event)"></child-component>
<input [(ngModel)]="complexObj.lines[0].data"></input>
您可以使用NgForm的valueChanges:

组成部分

模板

当数据有效时,这将发出值,在上述代码中,无论值是对的还是错的,都将触发事件。

您可以使用NgForm的valueChanges:

组成部分

模板


这将在数据有效时发出值,在上面的代码中,无论值是对的还是错的,都将触发事件。

您可以在更改输入时发出eventemitter,谢谢您的建议。这个表单比用大量潜在输入说明的要复杂一些。如果必须对每个输入使用更改检测,那将是一种耻辱。还有其他方法吗?您可以在更改输入时发出eventemitter,谢谢您的建议。这个表单比用大量潜在输入说明的要复杂一些。如果必须对每个输入使用更改检测,那将是一种耻辱。还有别的办法吗?谢谢你的建议。我要试试看。子组件实际上由一组递归组成,子组件创建相同类型的子组件等。是否有好的方法有条件地将顶级组件包装在标记中,以便我可以访问所有可能的子输入?例如,子模板可能有:并以这种方式递归创建更多输入,如果我将整个东西包装在一个表单标签中,我将拥有嵌套表单。这对嵌套组件不起作用吗?因为ngForm也无法从嵌套输入中获取值。感谢您的建议。我要试试看。子组件实际上由一组递归组成,子组件创建相同类型的子组件等。是否有好的方法有条件地将顶级组件包装在标记中,以便我可以访问所有可能的子输入?例如,子模板可能有:并以这种方式递归创建更多输入,如果我将整个东西包装在一个表单标签中,我将拥有嵌套表单。这对嵌套组件不起作用吗?因为ngForm也无法从嵌套输入中获取值。
this.myForm.statusChanges.subscribe(res => {
    if (res === 'VALID') {
       // emit(this.myForm.values)
    }
});