【发布时间】:2021-03-21 12:33:58
【问题描述】:
我有三个组件,如下图所示,并在我的功能组件中使用自定义表单组件。但是,这两个组件之间并没有直接的父子关系,它们之间还有一个表单组件。
我使用@Input 属性将数据从功能传递到表单,该属性在配置数据中具有输入值(比如说“configData”),然后通过@Input 属性将它们传递给自定义组件(比如说“configData.test”用于测试输入)没有任何问题(我可以在初始化自定义组件时传递每个参数)。但是,在初始化之后,当我设置一个可以在初始化时传递的配置值时,自定义控件不会检测到它。我还尝试为该输入使用 setter,如下所示,并等待捕获 ngOnChanges 方法的更改。如果没有直接的父子关系,我不确定是否可以更新该值,但我避免在可重用的自定义组件中使用服务。那么,解决方案是什么?我是否必须 BehaviourSubject 并通过服务传递价值?
custom-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);
}
这是我的组件的结构:
【问题讨论】:
-
听起来问题可能来自使用配置,然后是 @Input()。第一个关系不使用@Input() 是否有原因?
-
对不起,我解释错了,它也是通过@Input()在配置中传递的,这意味着从第一个到第二个,从第二个到第三个组件,数据是通过@Input()传递的。那么,初始化组件后如何获取输入值呢?
-
输入应该在原始值发生变化时更新,所以它本质上应该被传递下去。您是否更改了任何组件上的更改检测策略,b/c 会影响更新如何发生/通过组件。
-
感谢您的帮助,不,我的任何组件都没有检测策略。这个问题似乎与 Moshezauros 回答的某些观点有关。我想我可以通过遵循这些建议来解决。问候。
标签: javascript angular rxjs components behaviorsubject