gpt4 book ai didi

Angular2 向 DOM 树发出事件

转载 作者:搜寻专家 更新时间:2023-10-30 21:24:52 25 4
gpt4 key购买 nike

我有 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() {}
}

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

@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);
}
}

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

点击事件的处理程序在节点组件内部,这里我想通知面板点击了一个节点,然后更新上面的变量。

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

我调查了几种可能的解决方案,但没有找到适合我需要的任何解决方案。我知道 @Output-EventEmitter 机制允许向父组件发送事件,但在我的例子中,节点的父节点是树(在根节点的情况下)或另一个节点(子节点)。

在 AngularJS 中,我使用 $emit 在单击节点时发送事件,并使用 $on 在 Panel 中捕获它并更新 selectedNode 变量。在 Angular2 中,$emit $broadcast $on 事件机制不再可用。我怎样才能达到我的目标?感谢任何建议,即使不是基于事件的建议。

最佳答案

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

另见 Global Events in Angular 2Delegation: EventEmitter or Observable in Angular2

关于Angular2 向 DOM 树发出事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34859299/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com