渲染出来的标签 怎么添加@click ?

<template>

<div style="width: 256px">

<a-button type="primary" style="margin-bottom: 16px" @click="toggleCollapsed">

<a-icon :type="collapsed ? 'menu-unfold' : 'menu-fold'" />

</a-button>

<a-menu

:default-selected-keys="['1']"

:default-open-keys="['2']"

mode="inline"

theme="dark"

:inline-collapsed="collapsed"

>

<template v-for="item in list">

<a-menu-item v-if="!item.children" :key="item.key">

<a-icon type="pie-chart" />

<span>{{ item.title }}</span>

</a-menu-item>

<sub-menu v-else :key="item.key" :menu-info="item" />

</template>

</a-menu>

</div>

</template>

<script>

// recommend use functional component

// <template functional>

// <a-sub-menu :key="props.menuInfo.key">

// <span slot="title">

// <a-icon type="mail" /><span>{{ props.menuInfo.title }}</span>

// </span>

// <template v-for="item in props.menuInfo.children">

// <a-menu-item v-if="!item.children" :key="item.key">

// <a-icon type="pie-chart" />

// <span>{{ item.title }}</span>

// </a-menu-item>

// <sub-menu v-else :key="item.key" :menu-info="item" />

// </template>

// </a-sub-menu>

// </template>

// export default {

// props: ['menuInfo'],

// };

import { Menu } from 'ant-design-vue';

const SubMenu = {

template: `

<a-sub-menu :key="menuInfo.key" v-bind="$props" v-on="$listeners">

<span slot="title">

<a-icon type="mail" /><span>{{ menuInfo.title }}</span>

</span>

<template v-for="item in menuInfo.children">

<a-menu-item v-if="!item.children" :key="item.key">

<a-icon type="pie-chart" />

<span>{{ item.title }}</span>

</a-menu-item>

<sub-menu v-else :key="item.key" :menu-info="item" />

</template>

</a-sub-menu>

`,

name: 'SubMenu',

// must add isSubMenu: true

isSubMenu: true,

props: {

...Menu.SubMenu.props,

// Cannot overlap with properties within Menu.SubMenu.props

menuInfo: {

type: Object,

default: () => ({}),

},

},

};

export default {

components: {

'sub-menu': SubMenu,

},

data() {

return {

collapsed: false,

list: [

{

key: '1',

title: 'Option 1',

},

{

key: '2',

title: 'Navigation 2',

children: [

{

key: '2.1',

title: 'Navigation 3',

children: [{ key: '2.1.1', title: 'Option 2.1.1' }],

},

],

},

],

};

},

methods: {

toggleCollapsed() {

this.collapsed = !this.collapsed;

},

},

};

</script>

渲染出来的标签 怎么添加@click渲染出来的标签 怎么添加@click ?
我在红框里直接添加点击事件报错


回答:

可以考虑使用JSX来处理,然后就正常写 <div onClick={(event) => {}}></div> 绑定事件就好了。

渲染函数 & JSX | Vue.js


具体可以借鉴 AntD Vue Pro 早期版本的思路 ?
src/components/Menu/SideMenu.vue at v2 · vueComponent/ant-design-vue-pro
src/components/Menu/menu.js at v2 · vueComponent/ant-design-vue-pro


回答:

利用事件冒泡机制,将事件绑定在父节点上,使用 event.target 判断事件来自哪个节点并进行处理。


回答:

???你写的就是组件啊?
改 render 语法到 .vue 文件,直接走引入,
看起来清爽又好维护?
有什么必要一定要通过 render 语法的形式写组件吗?

以上是 渲染出来的标签 怎么添加@click ? 的全部内容, 来源链接: utcz.com/p/935162.html

回到顶部