Angular 角镖:将事件传递给另一个组合

Angular 角镖:将事件传递给另一个组合,angular,dart,angular-dart,Angular,Dart,Angular Dart,我有两个组件A和组件B。他们都是兄弟姐妹,都是母亲的孩子 单击componentA时,单击事件将由event handlerA触发和处理如何将此事件传递给组件B并由事件处理程序B处理? 欢迎任何评论。一些代码是受欢迎的。谢谢冒着听起来有点粗略的风险,你必须通过你的母亲。兄弟姐妹之间不能直接交谈 如果我理解正确,您的mother.component.html看起来有点像: <comp-a (your-event)="handleEvent()"></comp-a> <

我有两个组件A和组件B。他们都是兄弟姐妹,都是母亲的孩子

单击componentA时,单击事件将由event handlerA触发和处理如何将此事件传递给组件B并由事件处理程序B处理?


欢迎任何评论。一些代码是受欢迎的。谢谢

冒着听起来有点粗略的风险,你必须通过你的母亲。兄弟姐妹之间不能直接交谈

如果我理解正确,您的mother.component.html看起来有点像:

<comp-a (your-event)="handleEvent()"></comp-a>
<comp-b></comp-b>
这对于这个相对简单的场景来说很好。如果你必须上多个层,然后总是下多个层,这个解决方案很快就会变得令人厌烦。使用某种
可观察的
属性创建可注入服务可能会变得更合适


p、 我对Dart不太熟练,所以希望打字稿的例子对你有意义。

冒着听起来有点粗略的风险,你必须通过你的母亲。兄弟姐妹之间不能直接交谈

如果我理解正确,您的mother.component.html看起来有点像:

<comp-a (your-event)="handleEvent()"></comp-a>
<comp-b></comp-b>
这对于这个相对简单的场景来说很好。如果你必须上多个层,然后总是下多个层,这个解决方案很快就会变得令人厌烦。使用某种
可观察的
属性创建可注入服务可能会变得更合适


p、 我对Dart不太熟练,所以希望TypeScript示例对您有意义。

使用
EventEmitter
将事件发送到
主组件。。

请参阅:

使用
EventEmitter
将事件发送到
motherComponent
。。
请参阅:

通过父级传递事件是最佳做法,但还有另一种方法。您可以使用var ref来耦合组件

<compA #a ></compA><compB [clickStream]="a.click"></compB>

class CompA {
  StreamController _onClick = new StreamController();
  @Output()
  Stream click = _onClick.stream;
}

class CompB {
  @Input()
  set clickStream(Stream stream) {
    stream.listen(() {
      // Do work here on click
    });
  }
}

阶级比较{
StreamController _onClick=新的StreamController();
@输出()
Stream click=\u onClick.Stream;
}
康普班{
@输入()
设置clickStream(流){
听一听(){
//点击这里工作
});
}
}

同样,这不是最好的做法,但应该有效。

将事件传递给父级是最好的做法,但还有另一种方法。您可以使用var ref来耦合组件

<compA #a ></compA><compB [clickStream]="a.click"></compB>

class CompA {
  StreamController _onClick = new StreamController();
  @Output()
  Stream click = _onClick.stream;
}

class CompB {
  @Input()
  set clickStream(Stream stream) {
    stream.listen(() {
      // Do work here on click
    });
  }
}

阶级比较{
StreamController _onClick=新的StreamController();
@输出()
Stream click=\u onClick.Stream;
}
康普班{
@输入()
设置clickStream(流){
听一听(){
//点击这里工作
});
}
}
同样,这不是最好的做法,但应该是可行的