我们可以通过将数据推送到命令property回调函数来获取PrimeNG上下文菜单项点击的数据。
下面的示例代码也是第 N 级动态上下文菜单创建的示例。
例如-
[
{
"ID": 1,
"TITLE": "parent1",
"SUBMENU": [
{
"ID": 2,
"SUBMENU": [
{
"ID": 3,
"SUBMENU": [
{
"ID": 4,
"TITLE": "Child 1"
}
]
},
{
"ID": 13,
"SUBMENU": [
{
"ID": 5,
"TITLE": "Child 3"
}
]
},
{
"ID": 6,
"SUBMENU": [
{
"ID": 7,
"SUBMENU": [
{
"ID": 8,
"TITLE": "Child 4"
}
]
},
{
"ID": 9,
"SUBMENU": [
]
}
],
},
{
"ID": 10,
"SUBMENU": [
{
"SUBMENU": [
]
}
]
}
],
}
],
},
{
"ID": 11,
"TITLE": "parent2",
"SUBMENU": [
{
"ID": 12,
"TITLE": "Child 4"
}
],
}
]
根据上面的 JSON,我创建了 PrimeNG 上下文菜单项。
createContextMenuRecursive(object: any[]): MenuItem[] {
if (object) {
let menuList: MenuItem[] = [];
for (var i = 0; i < object.length; i++) {
if (object[i].ITEMS && object[i].ITEMS.length > 0) {
let returnedList = this.createContextMenuRecursive(object[i].ITEMS);
menuList.push(this.createMenuItem(object[i], returnedList));
}
else {
menuList.push(this.createMenuItem(object[i]));
}
}
return menuList;
}
}
以下函数用于创建PrimeNG上下文菜单项,其中参数data:any表示我们需要在命令函数中使用的数据。
createMenuItem(data: any, menuItems: MenuItem[] = []): MenuItem {
if (menuItems.length > 0) {
return { label: data.TITLE, items: menuItems, command: (event) => this.docGridContextMenuItemClick(event, data) };
}
else {
return { label: data.TITLE, command: (event) => this.docGridContextMenuItemClick(event, data) };
}
}
我们使用数据的上下文菜单项单击事件处理程序。
docGridContextMenuItemClick(event: any, data: any) {
console.log(JSON.stringify(data));
}