使用iview的menu时,希望菜单在横向和纵向切换。然而在纵向切换到横向时,控制台就会产生错误”Cannot read property 'update' of undefined“,但是并不影响显示和使用。
<template> <Menu :mode="tmode"> <template v-for="(m,index) in menus"> <Submenu :name="m.moduleCode" v-if="m.children.length>0" :key="m.routeName"> <template slot="title"> <span>{{m.name}}</span> </template> <MenuItem v-for="(m2,index2) in m.children" :name="m2.routeName" :key="m2.routeName"> <span>{{m2.name}}</span> </MenuItem> </Submenu> <MenuItem v-if="m.children.length==0" :name="m.routeName" :key="m.routeName+index"> <span>{{m.name}}</span> </MenuItem> </template> </Menu> </template> <script> export default { data(){ setTimeout(()=>{this.tmode='horizontal'},2000); return { tmode:'vertical', menus:[{ moduleCode:"1", iconType:"", name:"Navigation One", routeName:"", children:[{ name:"Option 1", routeName:"1-1" }, { name:"Option 2", routeName:"1-2" }, { name:"Option 3", routeName:"1-3" }, { name:"Option 4", routeName:"1-4" } ] }, { moduleCode:"2", iconType:"", name:"Navigation Two", routeName:"", children:[{ name:"Option 5", routeName:"2-1" }, { name:"Option 6", routeName:"2-2" }, { name:"Option 7", routeName:"2-3" }, { name:"Option 8", routeName:"2-4" } ] } ] } } } </script>
从错误堆栈看以看出是在submenu产生的,首先看文档,submenu只有一个name属性,那么少设置属性的错误排除。
去查看iview的源码中submenu部分,搜索update,发现
update只有这两个地方,同时也是只有横向时执行。那么错误就是drop没找到。再搜索ref=drop。
源码这里,可以看出,菜单横向和纵向是使用两个方式生成的。那么切换横向时,drop还没生成,因此产生了refs.drop是underfined的错误。