是否可以在初始化组件后传递数据?
Is it possible to pass data after initializing the components?
我有如下图所示的三个组件,并在我的功能组件中使用自定义表单组件。但是这两个组件之间并没有直接的父子关系,它们之间还有一个表单组件。
我使用 @Input
属性将数据从功能传递到表单,该属性在配置数据中具有输入值(比方说“configData”),然后通过 @Input
[=32] 将它们传递到自定义组件=](假设测试输入为“configData.test”)没有任何问题(我可以在初始化自定义组件时传递每个参数)。但是,初始化后,当我设置一个可以在初始化时传递的配置值时,自定义控件未检测到它。我还尝试使用 setter 作为该输入,如下所示,并等待捕捉 ngOnChanges
方法的变化。如果没有直接的父子关系,我不确定是否可以更新该值,但我避免在可重用自定义组件中使用服务。那么,解决方案是什么?我是否必须 BehaviourSubject 并通过服务传递价值?
自定义-component.ts:
private _test: string;
@Input() set test(value: string) {
this._test = value;
};
get test() { return this._test; }
ngOnChanges(changes: SimpleChanges) {
console.log(changes);
console.log(this.test);
}
这是我的组件的结构:
如果我理解正确,你的 configData 是一个对象,你只更新它的一些属性 - 如果是这种情况,你应该知道 angular 只会在该对象引用更改时触发.
如果这里确实是这种情况,您可以通过以下方式之一解决它:
- 每次您想要更改
configData
对象时重新创建它- configData = { ...configData, newProp: newPropValue };
Angular 将理解这是一个新对象并更新相关输入
- 您可以添加 DoCheck 生命周期挂钩 - 它会在每次 Angular 运行变更检测时运行 - 所以请注意这会触发 很多 次
- 传递输入不可变变量而不是可变变量 - 不是将
configData
作为对象传递,而是传递对象的属性
- 注册一个每次
configData
更改都会触发的可观察对象,然后相应地更新您的组件
我有如下图所示的三个组件,并在我的功能组件中使用自定义表单组件。但是这两个组件之间并没有直接的父子关系,它们之间还有一个表单组件。
我使用 @Input
属性将数据从功能传递到表单,该属性在配置数据中具有输入值(比方说“configData”),然后通过 @Input
[=32] 将它们传递到自定义组件=](假设测试输入为“configData.test”)没有任何问题(我可以在初始化自定义组件时传递每个参数)。但是,初始化后,当我设置一个可以在初始化时传递的配置值时,自定义控件未检测到它。我还尝试使用 setter 作为该输入,如下所示,并等待捕捉 ngOnChanges
方法的变化。如果没有直接的父子关系,我不确定是否可以更新该值,但我避免在可重用自定义组件中使用服务。那么,解决方案是什么?我是否必须 BehaviourSubject 并通过服务传递价值?
自定义-component.ts:
private _test: string;
@Input() set test(value: string) {
this._test = value;
};
get test() { return this._test; }
ngOnChanges(changes: SimpleChanges) {
console.log(changes);
console.log(this.test);
}
这是我的组件的结构:
如果我理解正确,你的 configData 是一个对象,你只更新它的一些属性 - 如果是这种情况,你应该知道 angular 只会在该对象引用更改时触发.
如果这里确实是这种情况,您可以通过以下方式之一解决它:
- 每次您想要更改
configData
对象时重新创建它-configData = { ...configData, newProp: newPropValue };
Angular 将理解这是一个新对象并更新相关输入 - 您可以添加 DoCheck 生命周期挂钩 - 它会在每次 Angular 运行变更检测时运行 - 所以请注意这会触发 很多 次
- 传递输入不可变变量而不是可变变量 - 不是将
configData
作为对象传递,而是传递对象的属性 - 注册一个每次
configData
更改都会触发的可观察对象,然后相应地更新您的组件