Смена иконки naiveui menu по клику
Пробую сделать смену темы с помощью кнопки в меню и хочу менять иконку BookmarkOutline на какую либо другую в из @vicons/ionicons5.
Сами иконки генерируются с помощью h().
Клик по кнопке меню ловлю по update:value и потом меняю this.theme.
Хотелось бы менять иконку в зависимости от значения this.theme
<template>
<n-space vertical>
<n-switch v-model:value="collapsed" />
<n-layout has-sider>
<n-layout-sider
bordered
collapse-mode="width"
:collapsed-width="64"
:width="240"
:collapsed="collapsed"
show-trigger
@update:value="handleClick"
@collapse="collapsed = true"
@expand="collapsed = false"
>
<n-menu
:collapsed="collapsed"
:collapsed-width="64"
:collapsed-icon-size="22"
:options="menuOptions"
:render-label="renderMenuLabel"
:render-icon="renderMenuIcon"
:expand-icon="expandIcon"
/>
</n-layout-sider>
<n-layout>
<span>Content</span>
</n-layout>
</n-layout>
</n-space>
</template>
<script>
import { h, ref, defineComponent } from "vue";
import { NIcon } from "naive-ui";
import { BookmarkOutline, CaretDownOutline } from "@vicons/ionicons5";
const menuOptions = [
{
label: "LABEL NAME",
key: "key-name",
}
];
export default defineComponent({
methods: {
handleClick: function (key) {
if (key === 'key-name')
this.theme = !this.theme
}
},
setup() {
return {
theme: ref(true),
menuOptions,
collapsed: ref(true),
renderMenuLabel(option) {
if ("href" in option) {
return h("a", { href: option.href, target: "_blank" }, [
option.label
]);
}
return option.label;
},
renderMenuIcon(option) {
if (option.key === "key-name")
return h(NIcon, null, { default: () => h(BookmarkOutline) });
},
expandIcon() {
return h(NIcon, null, { default: () => h(CaretDownOutline) });
}
};
}
});
</script>
Источник: Stack Overflow на русском