You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在ngx-graph中获取被点击节点的ID?

在Angular 9的ngx-graph中获取点击节点的ID

问题原因

你当前仅将DOM点击事件$event传入onNodeClick方法,这个事件对象仅包含浏览器鼠标事件的基础信息,不会携带ngx-graph的节点业务数据。而节点的ID、标签等信息,实际存在模板中通过let-node暴露的node变量里。

解决步骤

1. 修改模板中的点击事件

在节点模板的svg:g元素上,将node变量也传递给点击处理方法:

<svg:g
    (click)="onNodeClick($event, node)"
    class="node"
>

2. 更新组件中的点击处理逻辑

在component.component.ts里,修改onNodeClick方法,接收第二个参数node,直接访问其id属性即可获取目标值:

onNodeClick($event, node) {
    console.log('点击的节点ID:', node.id);
    // 如需查看完整节点数据,可直接打印node
    console.log('完整节点信息:', node);
}

完整修改后的代码示例

component.component.html

<ngx-graph
    class="chart-container"
    [view]="[800, 800]"
    [links]="[]"
    [nodes]="[
        {
            id: 'site-access',
            label: 'Site Access'
        }
    ]"
    [clusters]="[]"
    layout="dagreCluster"
>
    <ng-template #defsTemplate>
        <svg:marker
            id="arrow"
            viewBox="0 -5 10 10"
            refX="8"
            refY="0"
            markerWidth="4"
            markerHeight="4"
            orient="auto"
        >
            <svg:path d="M0,-5L10,0L0,5" class="arrow-head" />
        </svg:marker>
    </ng-template>

    <ng-template #nodeTemplate let-node>
        <svg:g
            (click)="onNodeClick($event, node)"
            class="node"
        >
            <svg:rect
                [attr.width]="node.dimension.width"
                [attr.height]="node.dimension.height"
                [attr.fill]="node.data.color"
            />
            <svg:text
                alignment-baseline="central"
                [attr.x]="10"
                [attr.y]="node.dimension.height / 2"
            >
                {{ node.label }}
            </svg:text>
        </svg:g>
    </ng-template>

</ngx-graph>

component.component.ts

import { Component, OnInit } from '@angular/core';
import * as shape from 'd3-shape';

@Component({
    selector: 'component',
    templateUrl: './component.component.html',
    styleUrls: ['./component.component.less'],
})
export class ComponentComponent implements OnInit {
    constructor() {}

    onNodeClick($event, node) {
        console.log('点击的节点ID:', node.id);
        console.log('完整节点信息:', node);
    }

    ngOnInit(): void {}
}

额外说明

如果不需要处理DOM事件(比如无需阻止冒泡、获取鼠标坐标等),可以直接仅传递node参数:

(click)="onNodeClick(node)"

对应的组件方法简化为:

onNodeClick(node) {
    console.log('点击的节点ID:', node.id);
}

内容的提问来源于stack exchange,提问作者Izin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 15:05:33