Angular2发出事件直到DOM树

蒂齐亚诺

我有3个组件来管理树:面板,树和节点。

面板包含一棵树

@Component({
  selector: 'panel',
  template: `
    <input type="button" (click)="createNode()" value="new node">
    <input type="button" (click)="createChild()" value="new child">
    <input type="button" (click)="deleteNode()" value="delete node">
    <tree [tree]="myTree"></tree>
    Selected node: {{selectedNode | json}}
  `,
  directives: [Tree]
})
export class Panel {
  public selectedNode;
  constructor() {}
}

树包含一个或多个节点(根节点)

@Component({
  selector: 'tree',
  template: `<node *ngFor="#n of tree" [node]="n"></node>`,
  directives: [Node]
})
export class Tree {
  @Input() tree;
  constructor() {}
}

一个节点又可以包含一个或多个节点(子节点)

@Component({
  selector: 'node',
  providers: [],
  template: `
    <p (click)="onSelect(node)">{{node.name}}</p>
    <div class="subTree">
      <node *ngFor="#n of node.children" [node]="n"></node>
    </div>
  `,
  directives: [Node]
})
export class Node {
  @Input() node;
  constructor() {}

  onSelect(node) {
    console.log("Selected node: " + node.name);
  }
}

面板是允许通过在树中添加和删除节点来编辑树的组件。我想做的是每次单击树中的节点时,在面板中更新变量“ selectedNode”。

click事件的处理程序位于Node组件内部,在这里我想通知面板单击Node的节点,然后更新上述变量。

这是到目前为止我所做的简化的Plunkr

我研究了几种可能的解决方案,但没有找到任何适合我的需求。我知道@ Output-EventEmitter机制允许将事件发送到父组件,但是在我的情况下,Node的父是Tree(如果是根节点)或另一个Node(子节点)。

在AngularJS中,我曾经$emit在单击Node时发送事件,并$on在Panel中捕获它并更新selectedNode变量。在Angular2中,$emit $broadcast $on事件机制不再可用。我如何达到目标?任何建议,甚至不是基于事件的建议,都应受到赞赏。

贡特·佐赫鲍尔(GünterZöchbauer)

触发的事件EventEmitter根本不会冒泡。解决方法是改用EventBus服务。

另请参见Angular 2中的全局事件委托:Angular2中的EventEmitter或Observable

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

通过Angular2中的嵌套组件发出事件

来自分类Dev

通过Angular2中的嵌套组件发出事件

来自分类Dev

angular2 从动态子级到父级发出事件

来自分类Dev

发出事件时,Angular 2调用函数/方法

来自分类Dev

在Angular 2中发出事件后如何订阅

来自分类Dev

vue 3发出警告“外部非发出事件监听器”

来自分类Dev

使用鼠标发出事件

来自分类Dev

如何发出事件的每个动作

来自分类Dev

如何使用jQuery发出事件?

来自分类Dev

套接字子类不发出事件

来自分类Dev

如何按发出事件的字段分组?

来自分类Dev

Vuejs 在呈现数据时发出事件

来自分类Dev

io.to('socketId') 不发出事件

来自分类Dev

Angular2:无法订阅从共享服务发出的自定义事件

来自分类Dev

Angular2 EventEmitter在回调中发出时不引发事件

来自分类Dev

ETW:通过现有提供商发出事件

来自分类Dev

在RxSwift中手动发出事件

来自分类Dev

创建服务器后Python SocketIO发出事件

来自分类Dev

从App.vue发出事件并捕获组件

来自分类Dev

Vue 3-从插槽中的子组件发出事件

来自分类Dev

VueJS 3从子组件到父组件发出事件

来自分类Dev

如何从路由文件在socket.io中发出事件?

来自分类Dev

有没有办法发出事件声音?

来自分类Dev

为什么我不需要发出事件?

来自分类Dev

无法从打字稿中的异步方法发出事件

来自分类Dev

有没有办法发出事件声音?

来自分类Dev

Angular2路由器出口组件事件发出(A2> = v1.2.0)

来自分类Dev

如何过滤angular2树

来自分类Dev

Angular2发布到Web服务