PrimeNG <p-menu> 如何保持点击菜单项被选中 (Angular 7)
PrimeNG <p-menu> how to keep click menu item selected (Angular 7)
我在 angular 7 项目中使用 primeNg 组件。
<p-menu [model]="items" ></p-menu>
在处理此组件时,我们无权访问其内部结构以将单击菜单项显示为选中状态。当某个菜单将被选中并更改其颜色时,按下激活 class。
有人知道吗?
经过一些研究,我找到了解决这个问题的方法。
Html:
<p-menu [model]="items" (click) = "activeMenu($event)"></p-menu>
单击菜单组件时,我添加了 activeMenu($event) 方法。 $event 携带点击的 DOM 元素,这是菜单项元素。
Component:
在组件上,我写了如下代码
activeMenu(event) {
let node;
if (event.target.tagName === "A") {
node = event.target;
} else {
node = event.target.parentNode;
}
let menuitem = document.getElementsByClassName("ui-menuitem-link");
for (let i = 0; i < menuitem.length; i++) {
menuitem[i].classList.remove("active");
}
node.classList.add("active")
}
感谢您提供这个 SURENDRANATH SONAWANE - 在尝试了许多其他解决方案后第一个对我有用的解决方案。
如果这对任何人有帮助,我无法识别我的 CSS class,必须在 .css 中添加以下符号(注意 :host >>>
前缀)
:host >>> .active {
background-color: #b8ebf5;
}
...另外,对于默认菜单项,通过设置 styleClass 在 MenuIItem[] 定义中预 select 它,例如:
this.items = [
{label: 'Search' , url : '/#/query' , styleClass : 'active'}, // Default item
{label: 'Stats' , url : '/#/stats' },
{label: 'User' , url : '/#/user' }
]
对于 PrimeNG 10,我必须按以下方式调整 Surendranath 的代码:
模板:
<p-menu [model]="items" (click) = "activeMenu($event)"></p-menu>
分量:
activeMenu(event) {
//console.log(event.target.classList);
let node;
if (event.target.classList.contains("p-submenu-header") == true) {
node = "submenu";
} else if (event.target.tagName === "SPAN") {
node = event.target.parentNode.parentNode;
} else {
node = event.target.parentNode;
}
//console.log(node);
if (node != "submenu") {
let menuitem = document.getElementsByClassName("p-menuitem");
for (let i = 0; i < menuitem.length; i++) {
menuitem[i].classList.remove("active");
}
node.classList.add("active");
}
}
全局样式(不是组件样式)
.p-menuitem.active {
background-color: orange;
}
html:
<p-menu
[model]="[
{ label: 'a', command: onClick() ,styleClass : getClassByLabel('a') },
{ label: 'b', command: onClick() ,styleClass : getClassByLabel('b') }
]"
><p-menu>
ts:
currentModel: any;
onClick() {
return (event) => this.currentModel = event.item;
}
getClassByLabel(label: string): string {
if (this.currentModel && this.currentModel.label == label) {
return 'active';
}
}
风格.css:
p-menu > div > ul > li.active > a > span {
color: color:blue !important;
}
我正在使用 Angular 13.0.2 和 Primeng 13.0.0
我将以下代码添加到myComponent.component.css not全局styles.scss
::ng-deep .p-menuitem-link-active{
background-color:#FED201!重要;
}
我在 angular 7 项目中使用 primeNg 组件。
<p-menu [model]="items" ></p-menu>
在处理此组件时,我们无权访问其内部结构以将单击菜单项显示为选中状态。当某个菜单将被选中并更改其颜色时,按下激活 class。
有人知道吗?
经过一些研究,我找到了解决这个问题的方法。
Html:
<p-menu [model]="items" (click) = "activeMenu($event)"></p-menu>
单击菜单组件时,我添加了 activeMenu($event) 方法。 $event 携带点击的 DOM 元素,这是菜单项元素。
Component:
在组件上,我写了如下代码
activeMenu(event) {
let node;
if (event.target.tagName === "A") {
node = event.target;
} else {
node = event.target.parentNode;
}
let menuitem = document.getElementsByClassName("ui-menuitem-link");
for (let i = 0; i < menuitem.length; i++) {
menuitem[i].classList.remove("active");
}
node.classList.add("active")
}
感谢您提供这个 SURENDRANATH SONAWANE - 在尝试了许多其他解决方案后第一个对我有用的解决方案。
如果这对任何人有帮助,我无法识别我的 CSS class,必须在 .css 中添加以下符号(注意 :host >>>
前缀)
:host >>> .active {
background-color: #b8ebf5;
}
...另外,对于默认菜单项,通过设置 styleClass 在 MenuIItem[] 定义中预 select 它,例如:
this.items = [
{label: 'Search' , url : '/#/query' , styleClass : 'active'}, // Default item
{label: 'Stats' , url : '/#/stats' },
{label: 'User' , url : '/#/user' }
]
对于 PrimeNG 10,我必须按以下方式调整 Surendranath 的代码:
模板:
<p-menu [model]="items" (click) = "activeMenu($event)"></p-menu>
分量:
activeMenu(event) {
//console.log(event.target.classList);
let node;
if (event.target.classList.contains("p-submenu-header") == true) {
node = "submenu";
} else if (event.target.tagName === "SPAN") {
node = event.target.parentNode.parentNode;
} else {
node = event.target.parentNode;
}
//console.log(node);
if (node != "submenu") {
let menuitem = document.getElementsByClassName("p-menuitem");
for (let i = 0; i < menuitem.length; i++) {
menuitem[i].classList.remove("active");
}
node.classList.add("active");
}
}
全局样式(不是组件样式)
.p-menuitem.active {
background-color: orange;
}
html:
<p-menu
[model]="[
{ label: 'a', command: onClick() ,styleClass : getClassByLabel('a') },
{ label: 'b', command: onClick() ,styleClass : getClassByLabel('b') }
]"
><p-menu>
ts:
currentModel: any;
onClick() {
return (event) => this.currentModel = event.item;
}
getClassByLabel(label: string): string {
if (this.currentModel && this.currentModel.label == label) {
return 'active';
}
}
风格.css:
p-menu > div > ul > li.active > a > span {
color: color:blue !important;
}
我正在使用 Angular 13.0.2 和 Primeng 13.0.0
我将以下代码添加到myComponent.component.css not全局styles.scss
::ng-deep .p-menuitem-link-active{ background-color:#FED201!重要; }