我具有三个组成部分(C1,C2,C3),这意味着C2在C1中被调用,而C3在C2中被调用。我想通过属性绑定将C1中的数据发送到C3。
在C1的模板中,我确实绑定了变量,该变量可以通过@Input在C2中接收,而在C2的模板中,我确实绑定了相同的变量(@Input),但是我没有进入C3。
仅当我将数据存储在C2中的一个临时变量中并在C2的模板中绑定(临时)变量时才可以使用。
那么将数据存储在临时变量中是强制性的还是有任何解决方法?
答案 0 :(得分:1)
更新C1时,嵌套的C3组件也应更新。
出于好奇,我创建了一个简单的stackblitz来尝试:https://stackblitz.com/edit/angular-i18qg3
单击“更新变量”按钮时,它将更新rootVariable,该变量将绑定到C2,然后绑定到C3。
请检查是否已将更改检测更改为C2或C3中的onPush。
发生这种情况是因为:
- 我们直接对用户对象进行了变异
- 但是OnPush通过比较组件输入的引用来工作
- 因为我们没有提供对新对象的引用,而是对现有对象进行了突变,所以未触发OnPush更改检测器
如果我们将changeUserName()的实现更改为以创建新的用户实例,而不是对现有实例进行更改,那么一切都会按预期进行