报错 Cannot read properties of undefined (reading ‘propsData‘)“ ?
使用 vue 在引入 antd 有关于菜单的组件时一直报错,其他无关 menu 的组件都能够正常显示,这个 bug 困扰了我好久,最终在 GitHub 上找到了解决问题的方法。报错信息如下:问题描述:我一开始是这样引入的:import Vue from 'vue'import { Menu, Layout, Icon, Breadcrumb } from 'ant-design-vue' // 按
·
使用 vue 在引入 antd 有关于菜单的组件时一直报错,其他无关 menu 的组件都能够正常显示,这个 bug 困扰了我好久,最终在 GitHub 上找到了解决问题的方法。
报错信息如下:
问题描述:
我一开始是这样引入的:
import Vue from 'vue'
import { Menu, Layout, Icon, Breadcrumb } from 'ant-design-vue' // 按需引入组件并注册
Vue.use(Layout)
export default {
components: {
'a-menu': Menu,
'a-icon': Icon,
'a-breadcrumb': Breadcrumb,
'a-breadcrumb-item': Breadcrumb.Item
},
然后浏览器一直报错,通过查看浏览器控制台的报错信息也大概知道是少了 ASubMenu 和 AMenuItem 的缘故,因此我就引入,但是都没反应,所以就觉得不是这个的问题,之后一直问度娘也没找到可以解决的办法,最终在 GitHub 上面才发现是自己引入的方式不对。
正确做法应该是在component 中这样引入:
components: {
'a-menu': Menu,
'a-icon': Icon,
'a-breadcrumb': Breadcrumb,
'a-breadcrumb-item': Breadcrumb.Item,
ASubMenu: Menu.SubMenu,
AMenuItem: Menu.Item
},
最后,附上页面源码供参考:
<template>
<a-layout id="components-layout-demo-top-side-2">
<a-layout-header class="header">
<div class="logo" />
<a-menu
theme="dark"
mode="horizontal"
:default-selected-keys="['2']"
:style="{ lineHeight: '64px' }"
>
<a-menu-item key="1">
nav 1
</a-menu-item>
<a-menu-item key="2">
nav 2
</a-menu-item>
<a-menu-item key="3">
nav 3
</a-menu-item>
</a-menu>
</a-layout-header>
<a-layout>
<a-layout-sider width="200" style="background: #fff">
<a-menu
mode="inline"
:default-selected-keys="['1']"
:default-open-keys="['sub1']"
:style="{ height: '100%', borderRight: 0 }"
>
<a-sub-menu key="sub1">
<span slot="title"><a-icon type="user" />subnav 1</span>
<a-menu-item key="1">
option1
</a-menu-item>
<a-menu-item key="2">
option2
</a-menu-item>
<a-menu-item key="3">
option3
</a-menu-item>
<a-menu-item key="4">
option4
</a-menu-item>
</a-sub-menu>
<a-sub-menu key="sub2">
<span slot="title"><a-icon type="laptop" />subnav 2</span>
<a-menu-item key="5">
option5
</a-menu-item>
<a-menu-item key="6">
option6
</a-menu-item>
<a-menu-item key="7">
option7
</a-menu-item>
<a-menu-item key="8">
option8
</a-menu-item>
</a-sub-menu>
<a-sub-menu key="sub3">
<span slot="title"><a-icon type="notification" />subnav 3</span>
<a-menu-item key="9">
option9
</a-menu-item>
<a-menu-item key="10">
option10
</a-menu-item>
<a-menu-item key="11">
option11
</a-menu-item>
<a-menu-item key="12">
option12
</a-menu-item>
</a-sub-menu>
</a-menu>
</a-layout-sider>
<a-layout style="padding: 0 24px 24px">
<a-breadcrumb style="margin: 16px 0">
<a-breadcrumb-item>Home</a-breadcrumb-item>
<a-breadcrumb-item>List</a-breadcrumb-item>
<a-breadcrumb-item>App</a-breadcrumb-item>
</a-breadcrumb>
<a-layout-content
:style="{ background: '#fff', padding: '24px', margin: 0, minHeight: '280px' }"
>
Content
</a-layout-content>
</a-layout>
</a-layout>
</a-layout>
</template>
<script>
import Vue from 'vue'
import { Menu, Layout, Icon, Breadcrumb } from 'ant-design-vue' // 按需引入组件并注册
Vue.use(Layout)
export default {
components: {
'a-menu': Menu,
'a-icon': Icon,
'a-breadcrumb': Breadcrumb,
'a-breadcrumb-item': Breadcrumb.Item,
ASubMenu: Menu.SubMenu,
AMenuItem: Menu.Item
},
data () {
return {
collapsed: false
}
},
methods: {
}
}
</script>
<style>
#components-layout-demo-top-side-2 .logo {
width: 120px;
height: 31px;
background: rgba(255, 255, 255, 0.2);
margin: 16px 28px 16px 0;
float: left;
}
</style>
更多推荐
已为社区贡献2条内容
所有评论(0)