Angular 使用setter截取输入属性更改的优点是什么?

Angular 使用setter截取输入属性更改的优点是什么?,angular,typescript,rxjs,components,Angular,Typescript,Rxjs,Components,我使用了一些方法在父子或同级组件之间传递数据,例如@Input、EventEmitter、BehaviorSubject。另一方面,还有另一种方法,但我没有抓住使用这种方法与@Input或EventEmitter相比的确切优势。那么,您能解释一下使用它而不是其他方法的想法吗?如果您需要将数据或挂钩转换为一个输入的给定更新,那么setter在这种情况下非常有用 例如,您基本上可以使用它来代替ngOnChangeshook 对我来说,一个常见的用例是将值转换为可观察值。我希望Angular中有一种原

我使用了一些方法在父子或同级组件之间传递数据,例如@Input、EventEmitter、BehaviorSubject。另一方面,还有另一种方法,但我没有抓住使用这种方法与@Input或EventEmitter相比的确切优势。那么,您能解释一下使用它而不是其他方法的想法吗?

如果您需要将数据或挂钩转换为一个输入的给定更新,那么setter在这种情况下非常有用

例如,您基本上可以使用它来代替
ngOnChanges
hook

对我来说,一个常见的用例是将值转换为可观察值。我希望Angular中有一种原生的方式来访问作为可观察对象的输入(参见)。因此,同时,我使用setter将从父对象传递的值推送到私有主题中


这只是一个例子,您可以进行任何类型的转换,如果您需要将数据或挂钩转换为一个输入的给定更新,那么setter在这种情况下非常有用

例如,您基本上可以使用它来代替
ngOnChanges
hook

对我来说,一个常见的用例是将值转换为可观察值。我希望Angular中有一种原生的方式来访问作为可观察对象的输入(参见)。因此,同时,我使用setter将从父对象传递的值推送到私有主题中


这只是一个例子,你可以做任何类型的转换。弗雷德里克,看看这个 我只是一个例子,若你们的“孩子”是“城市”的自动完成,你们的孩子可以像

@Input() control:FormControl
@Input()set state(value)
{
    this.cities$=this.service.getCities(value)
}
请注意,控件是一个“正常的”
@输入,而状态是一个创建可观察对象的设置器。注意,即使在“儿童”中也没有所谓的“国家”


{{city.name}
你的父母呢

 <form [formGroup]="form>
     <input formControlName="state">
     <app-children [control]="form.get('city')">
                   [state]="from.get('state').value">
     </app-children>
 </form>

弗雷德里克,看看这个 我只是一个例子,若你们的“孩子”是“城市”的自动完成,你们的孩子可以像

@Input() control:FormControl
@Input()set state(value)
{
    this.cities$=this.service.getCities(value)
}
请注意,控件是一个“正常的”
@输入,而状态是一个创建可观察对象的设置器。注意,即使在“儿童”中也没有所谓的“国家”


{{city.name}
你的父母呢

 <form [formGroup]="form>
     <input formControlName="state">
     <app-children [control]="form.get('city')">
                   [state]="from.get('state').value">
     </app-children>
 </form>

来自文档-“子NameChildComponent中的name输入属性的setter修剪名称中的空白,并用默认文本替换空值。”。他们正在添加逻辑,该逻辑在设置传入值时触发,以转换值或执行其他操作。对于变量,您只需接受传入值。这有意义吗?是的,我读过,但需要在它和仅使用
@Input
功能之间进行逻辑比较。当父项的
@Input
更改需要“创建”一系列操作时,可以在输入中使用setter,想象一下,例如,进行复杂的计算或调用API。你不能在恩戈尼特做这件事。如果只需要在.html中显示子项的变量,则不使用setter@Eliseo你的意思是,如果我需要在
ngOninit
之后对输入进行一些更新,那么最好使用这种方法,而不仅仅是使用@input特性?我认为通过这种方法,我可以更新来自父级的输入值,并且每当我启动setter时,我可以更新子级中的输入值?这都是真的吗?如果您需要将数据或挂钩转换为一个输入的给定更新,那么setter在这种情况下非常有用。例如,您基本上可以使用它而不是ngOnChanges。对我来说,一个常见的用例是将值转换为可观察值。我使用setter将从父对象传递的值推送到私有主题中。这只是文档中的一个例子——“子NameChildComponent中name输入属性的setter修剪名称中的空白,并用默认文本替换空值。”。他们正在添加逻辑,该逻辑在设置传入值时触发,以转换值或执行其他操作。对于变量,您只需接受传入值。这有意义吗?是的,我读过,但需要在它和仅使用
@Input
功能之间进行逻辑比较。当父项的
@Input
更改需要“创建”一系列操作时,可以在输入中使用setter,想象一下,例如,进行复杂的计算或调用API。你不能在恩戈尼特做这件事。如果只需要在.html中显示子项的变量,则不使用setter@Eliseo你的意思是,如果我需要在
ngOninit
之后对输入进行一些更新,那么最好使用这种方法,而不仅仅是使用@input特性?我认为通过这种方法,我可以更新来自父级的输入值,并且每当我启动setter时,我可以更新子级中的输入值?这都是真的吗?如果您需要将数据或挂钩转换为一个输入的给定更新,那么setter在这种情况下非常有用。例如,您基本上可以使用它而不是ngOnChanges。对我来说,一个常见的用例是将值转换为可观察值。我使用setter将从父对象传递的值推送到私有主题中。这只是一个例子非常感谢你的帮助和良好的解释。我对这个问题有很多看法,它太长了,而且有一些不同的解决方案。您在该页面中引用并建议遵循哪种解决方案?另一方面,我的子组件是基于mat autocomplete的自定义sutocomplete,我希望基于其父组件更新其值,该父组件也是相同的组件,如州和城市autocomplete列表。我认为这种方法适合我,但我不确定我是否走上了正确的道路。我正在将父级的选定id从这些自定义自动完成组件传递到表单组件。然后根据该值,检索子自动完成列表值,然后将其传递给自定义组件(子)。>>>>然后尝试使用该值更新子组件的选项。这是正确的方法吗?O