是否可以在初始化组件后传递数据?

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 只会在该对象引用更改时触发.

如果这里确实是这种情况,您可以通过以下方式之一解决它:

  1. 每次您想要更改 configData 对象时重新创建它- configData = { ...configData, newProp: newPropValue }; Angular 将理解这是一个新对象并更新相关输入
  2. 您可以添加 DoCheck 生命周期挂钩 - 它会在每次 Angular 运行变更检测时运行 - 所以请注意这会触发 很多
  3. 传递输入不可变变量而不是可变变量 - 不是将 configData 作为对象传递,而是传递对象的属性
  4. 注册一个每次 configData 更改都会触发的可观察对象,然后相应地更新您的组件