Fixed #949 - Router support for PanelMenu headers

pull/1196/head^2
Cagatay Civici 2021-05-14 18:58:46 +03:00
parent 5319c59d01
commit 22fc6b212a
2 changed files with 13 additions and 7 deletions

View File

@ -3,7 +3,13 @@
<template v-for="(item, index) of model" :key="item.label + '_' + index"> <template v-for="(item, index) of model" :key="item.label + '_' + index">
<div v-if="visible(item)" :class="getPanelClass(item)" :style="item.style"> <div v-if="visible(item)" :class="getPanelClass(item)" :style="item.style">
<div :class="getHeaderClass(item)" :style="item.style"> <div :class="getHeaderClass(item)" :style="item.style">
<a :href="item.url" class="p-panelmenu-header-link" @click="onItemClick($event, item)" :tabindex="item.disabled ? null : '0'" <router-link v-if="item.to && !item.disabled" :to="item.to" custom v-slot="{navigate, href}">
<a :href="href" class="p-panelmenu-header-link" @click="onItemClick($event, item, navigate)" role="treeitem">
<span v-if="item.icon" :class="getPanelIcon(item)"></span>
<span class="p-menuitem-text">{{item.label}}</span>
</a>
</router-link>
<a v-else :href="item.url" class="p-panelmenu-header-link" @click="onItemClick($event, item)" :tabindex="item.disabled ? null : '0'"
:aria-expanded="isActive(item)" :id="ariaId +'_header'" :aria-controls="ariaId +'_content'"> :aria-expanded="isActive(item)" :id="ariaId +'_header'" :aria-controls="ariaId +'_content'">
<span v-if="item.items" :class="getPanelToggleIcon(item)"></span> <span v-if="item.items" :class="getPanelToggleIcon(item)"></span>
<span v-if="item.icon" :class="getPanelIcon(item)"></span> <span v-if="item.icon" :class="getPanelIcon(item)"></span>
@ -41,16 +47,12 @@ export default {
} }
}, },
methods: { methods: {
onItemClick(event, item) { onItemClick(event, item, navigate) {
if (item.disabled) { if (item.disabled) {
event.preventDefault(); event.preventDefault();
return; return;
} }
if (!item.url && !item.to) {
event.preventDefault();
}
if (item.command) { if (item.command) {
item.command({ item.command({
originalEvent: event, originalEvent: event,
@ -62,6 +64,10 @@ export default {
this.activeItem = null; this.activeItem = null;
else else
this.activeItem = item; this.activeItem = item;
if (item.to && navigate) {
navigate(event);
}
}, },
getPanelClass(item) { getPanelClass(item) {
return ['p-panelmenu-panel', item.class]; return ['p-panelmenu-panel', item.class];

View File

@ -40,7 +40,7 @@ export default {
} }
}, },
methods: { methods: {
onItemClick($event, item, navigate) { onItemClick(event, item, navigate) {
if (item.disabled) { if (item.disabled) {
event.preventDefault(); event.preventDefault();
return; return;