ant design of angular中的nz-tree在官方实例并没有给出和context menu的例子, 不过官方的context menu独立的例子倒是有:
https://ng.ant.design/components/dropdown/zh#components-dropdown-demo-context-menu
我们需要把nz-tree和context menu 结合。
  1. nz-tree的每一个tree item的自定义模板的写法如下:
nz-tree #nzTree [(ngModel)]="nodes" [nzShowLine]="true" [nzDefaultExpandAll]="false" >
<ng-template #nzTreeTemplate let-node>
<span>
{{ node.title }}
</span>
</ng-template
</nz-tree>`

  1. context menu 的自定义模板和创建如下:
//触发右键菜单的创建
<span (contextmenu)="contextMenu($event,template)">
{{ node.title }}
</span>
//右键菜单的item项
<ng-template #template>
<ul nz-menu nzInDropDown (nzClick)="close($event)">
<li nz-menu-item (click)="editUnit(node, $event)">修改</li>
<li nz-menu-item>增加</li>
<li nz-menu-item nzDisabled>删除</li>
</ul>
</ng-template>
//声明导入
import { Component, OnInit, ViewChild, TemplateRef } from '@angular/core';
import { NzTreeNode, NzTreeComponent, NzDropdownContextComponent, NzDropdownService, NzMenuItemDirective } from 'ng-zorro-antd';
//构造函数里注入右键菜单的服务
private dropdown: NzDropdownContextComponent;
constructor( private nzDropdownService: NzDropdownService) { }
//创建右键菜单和关闭右键菜单的代码
contextMenu($event: MouseEvent, template: TemplateRef<void>): void {
this.dropdown = this.nzDropdownService.create($event, template);
}
close(e: NzMenuItemDirective): void {
console.log(e);
this.dropdown.close();
}
//右键菜单的菜单项的单击事件处理
editUnit(node: NzTreeNode, e: NzFormatEmitEvent): void {
}

  1. 最终的nz-tree 模板和右键菜单结合后的html如下
<nz-tree #nzTree [(ngModel)]="nodes" [nzShowLine]="true" [nzDefaultExpandAll]="false" >
<ng-template #nzTreeTemplate let-node>
<span (contextmenu)="contextMenu($event,template)">
{{ node.title }}
</span>
</ng-template>
<ng-template #template>
<ul nz-menu nzInDropDown (nzClick)="close($event)">
<li nz-menu-item (click)="editUnit(node, $event)">修改</li>
<li nz-menu-item>增加</li>
<li nz-menu-item nzDisabled>删除</li>
</ul>
</ng-template>
</nz-tree>`

上面完成了nz-tree树控件添加右键菜单的功能示例。
接下来,我们为树节点添加单击时的选中效果。 简单来说, 就是在nz-tree的节点模板中为dom元素添加选中时的class, 然后在css中写上对应style即可。 
不过需要注意的是, 单击选中的状态的判断并不是用NzTreeNode自带的isSelected属性, 发现这个属性判断有问题。 最终解决是保存当前的单击树节点, 然后在模板中判断是否是当前选中项。
<ng-template #nzTreeTemplate let-node>
<span  [class.active]="selectedNode !== null && selectedNode === node" (contextmenu)=" contextMenu($event,template) :"
(click)="updateSelectedNode(node, $event)">
<span>
<i class="anticon anticon-folder-open" *ngIf="!node.isLeaf"></i>
<i class="anticon anticon-file" *ngIf="node.isLeaf"></i>{{ node.title }}
</span>
</span>
<ng-template #template>
<ul nz-menu nzInDropDown (nzClick)="close($event)">
<li nz-menu-item (click)="editUnit(node, $event)">修改</li>
<li nz-menu-item>增加</li>
<li nz-menu-item nzDisabled>删除</li>
</ul>
</ng-template>
</ng-template>
selectedNode: NzTreeNode;
updateSelectedNode(node: NzTreeNode, e: NzFormatEmitEvent): void {
this.selectedNode = node;
}
.active {
background-color: cornflowerblue
}

nz-tree的右键菜单的实现, 以及选中状态的实现相关推荐

  1. win11展开右键菜单(还原为win10状态)的方法

    目录 一.还原win10右键菜单的方法 二.恢复win11原右键菜单的方法 一.还原win10右键菜单的方法 WIN+R 输入cmd打开命令提示行 输入 reg add HKCU\Software\C ...

  2. windows添加右键菜单

    为windows系统鼠标右键添加软件和图标 一.打开注册表 首先打开windows的注册表,当然了,我个人倾向于 (1)使用windows键+R,打开运行框 (2)输入regedit 然后敲击回车,进 ...

  3. antd Tree组件中,自定义右键菜单

    最近项目中,有一个需求是自定义antd的Tree组件的右键菜单功能. 直接上代码 class Demo extends Component {state = {rightClickNodeTreeIt ...

  4. JQuery之ContextMenu(右键菜单)

    JQuery之ContextMenu(右键菜单) 插件下载地址: http://www.trendskitchens.co.nz/jquery/contextmenu/jquery.contextme ...

  5. TreeList右键菜单功能

    1:常用属性 1): Appearance->FocusedRow-->BackColor  设置选中的节点颜色 2):LookAndFell-->  将树的样式设置为加减号的样式, ...

  6. java 树 右键菜单_jsp代码 树上加右键菜单

    网上看到很多人不知道怎么在js代码的树上加右键菜单.我有实现的代码如下 但我就是不知道怎么灰掉不该出现的时候,如在非子节点时,不能用"增加到收藏夹"功能 Ext.ux.AddToF ...

  7. EasyUI 的Tab 标签添加右键菜单

    样式: 主要提供右键功能代码. (只需要提供你需要的js和css就行了) <!doctype html> <html> <head> <basehref=&q ...

  8. 自定义treeview控件,实现右键菜单编辑功能

    试过用复合控件包含treeview控件,但是失败,这次在右键菜单调用tree的回发js成功可以在页面后台绑定被编辑的节点,后台3个函数都可以编辑用c#传的参数e.mynode就是右键菜单的选中的节点 ...

  9. vue2+elTree 实现右键菜单

    背景:通过树形控件筛选出子节点数据渲染列表,再操作列表.操作在繁琐,现在需要直接通过树进行操作:删除,编辑,详情等等. 首先创建一个树 <el-treeref="tree": ...

最新文章

  1. AI从业者需要应用的10种深度学习方法
  2. hdu4882 水贪心
  3. python实现 多叉树 寻找最短路径
  4. 智慧交通day04-特定目标车辆追踪02:Siamese网络+单样本学习
  5. linux文件浏览 ls,linux浏览文件命令
  6. websphere一直安装部署_WebSphere集群安装配置及部署应用说明
  7. 在函数中的局部程序(像是比局部变量还局部的部分)
  8. 自从在 IDEA 中用了热部署神器 JRebel,开发效率提升了 10 倍!
  9. 你的第一个 iOS 应用程序: 100% 的编程方式
  10. UiPath Excel 数据筛选修改
  11. 在Swift中使用dispatch_once单例模型
  12. 移动硬盘插服务器上坏了,移动硬盘接口坏了怎么办解决教程
  13. 笔记-CTA认证需要的操作, 应用可卸载, 系统还原后应用重装--Camera模块
  14. 小米路由器刷Xiaomi Mi WiFi Mini openwrt
  15. 锁定计算机 背景图片,win7系统电脑更换锁屏壁纸的方法
  16. fast无线网卡linux驱动,fast无线网卡驱动,详细教您fast无线网卡驱动
  17. 博客插入GIF动图技巧
  18. 设计一个Roguelike-RPG小游戏
  19. 到底要不要购买企业收费邮箱?
  20. 阿里P7晒出工资单:狠补了这个,真香...

热门文章

  1. oralce函数大全
  2. 能上Q不能上网解决方案
  3. altc财金网为你分享币圈波段操作技巧
  4. 【舰船数据集格式转换】HRSID数据集VOC转COCO
  5. vba 为excel排序
  6. Django搭建简单网站
  7. 综合素质计算机的知识考点,综合素质常识考题
  8. 莫比乌斯反演的证明(非狄利克雷卷积法)
  9. 混合波束成形| 高速铁路通信系统的信道估计:Location-Aided mMIMO Channel Tracking and Hybrid Beamforming for High-Speed
  10. 基于javaweb+jsp的网上商城系统(java+jsp+servlet+mysql+ajax)