Angular 如何将数据发送到嵌套组件(父-子(父)-子)?

Angular 如何将数据发送到嵌套组件(父-子(父)-子)?,angular,typescript,Angular,Typescript,我嵌套了三个组件(C1、C2、C3),这意味着C2在C1中调用,C3在C2中调用。我想通过属性绑定将C1中的数据发送到C3 在C1的模板中,我绑定了变量,我可以通过@Input在C2中接收该变量,在C2的模板中,我绑定了相同的变量(@Input),但在C3中没有绑定 只有当我将数据存储在C2中的临时变量中,并将(临时)变量绑定到C2的模板中,才能在C3中接收数据时,它才起作用 因此,是否必须将数据存储在临时变量中,或者是否有任何解决方法?更新C1时,嵌套的C3组件也应更新 出于好奇,我创建了一个

我嵌套了三个组件(C1、C2、C3),这意味着C2在C1中调用,C3在C2中调用。我想通过属性绑定将C1中的数据发送到C3

在C1的模板中,我绑定了变量,我可以通过@Input在C2中接收该变量,在C2的模板中,我绑定了相同的变量(@Input),但在C3中没有绑定

只有当我将数据存储在C2中的临时变量中,并将(临时)变量绑定到C2的模板中,才能在C3中接收数据时,它才起作用


因此,是否必须将数据存储在临时变量中,或者是否有任何解决方法?

更新C1时,嵌套的C3组件也应更新

出于好奇,我创建了一个简单的stackblitz来尝试:

  • C2组件嵌套在应用程序(根)组件中。rootProperty绑定到C2Property
  • C3组件嵌套在C2组件中。C2Property绑定到C3Property
当点击“更新变量”按钮时,它更新rootVariable,它绑定到C2,随后绑定到C3

检查您是否已将更改检测更改为C2或C3中的onPush

摘自:

出现这种情况是因为:

  • 我们直接改变了用户对象
  • 但OnPush是通过比较组件输入的引用来工作的
  • 因为我们没有提供对新对象的引用,而是对现有对象进行了变异,所以OnPush更改检测器没有被触发
如果我们改变changeUserName()的实现来创建一个新的用户实例,而不是改变现有实例,那么一切都会按预期工作


您可以使用一个使用服务将数据传递给组件的可观察对象。这是共享服务模式的一个用例