【发布时间】:2019-09-25 22:47:50
【问题描述】:
我有一个主要组件和一个孩子
<main>
<child
[nodes]="nodes"
(nodeChanged)="someFunction(output)">
</child>
<main>
子组件递归渲染多级树结构(即如果有子节点,它会渲染自己),其中每个节点都是可点击的,无论它是否是终端节点。
在子组件中,每个节点都有一个注册为“clickedNode()”的点击事件。现在因为我不想让我的点击事件冒泡到点击节点的头部,所以我在“clickedNode()”函数中写了“event.stopPropagation()”。
@Output() nodeChanged = new EventEmitter<Object>();
clickedNode(selectedNode, e:MouseEvent){
this.nodeChanged.emit(selectedNode);
e.stopPropagation();
}
现在的问题是@output emitter 如果组件的内部级别被单击,则不会。仅在单击一级节点时才会发出。
【问题讨论】:
-
我只能猜到一个原因,
e在某些时候没有定义,clickedNode崩溃。检查控制台。@Output和鼠标事件完全没有关联。 -
is selectedNode 实际上是您的方法传入的事件吗?尝试删除传递给你的 clickedNode 方法 clickedNode( e:MouseEvent) 的第一个参数 - 你实际上并没有将一个节点传递给你正在调用的方法
-
@David
(click)="clickedNode(node, $event)"selectedNode 是我从 html 传递的值,即被点击的节点对象 -
@David Html 是父组件,“clickedNode”函数写在子组件中。我已经编辑了问题以使其清楚
-
只是试一试,但是.... 在拨打
this.nodeChanged.emit(selectedNode)之前先拨打stopPropogation()
标签: javascript angular angular6 angular-components