【Vue】element-ui中submenu使用default-opened与vue页面信息刷新的冲突

<div id="body">

<div>{{now}}</div>

<el-menu :default-openeds="['1']">

<el-submenu index="1">

<template slot="title"><i class="el-icon-menu"></i>功能列表</template>

<el-menu-item>option-1</el-menu-item>

<el-menu-item-group title="option-1-1">

<el-menu-item>option-1-1-1</el-menu-item>

<el-menu-item>option-1-1-2</el-menu-item>

</el-menu-item-group>

</el-submenu>

<el-submenu index="2">

<template slot="title"><i class="el-icon-menu"></i>功能列表</template>

<el-menu-item>option-2</el-menu-item>

<el-menu-item-group title="option-2-1">

<el-menu-item>option-2-1-1</el-menu-item>

<el-menu-item>option-2-1-2</el-menu-item>

</el-menu-item-group>

</el-submenu>

</el-menu>

</div>

<script src="https://segmentfault.com/scripts/vue.min.js"></script>

<script src="https://segmentfault.com/element-ui-2.3.7/lib/index.js"></script>

<link rel="stylesheet" href="https://segmentfault.com/element-ui-2.3.7/lib/theme-chalk/index.css" crossorigin="anonymous">

<script type="text/javascript">

var page = new Vue({

el : '#body',

data : {

now : '',

},

mounted : function () {

this.get_date();

},

methods : {

get_date : function() {

this.$set(this, 'now', new Date().toLocaleString(undefined, {hour12:false}));

setTimeout(() => {

this.get_date();

}, 1000);

},

},

});

</script>

代码如图,vue版本是2.5.16,element版本如图。

页面显示为:
【Vue】element-ui中submenu使用default-opened与vue页面信息刷新的冲突

el-menu使用default-openeds默认打开option-1,关闭option-2。
但出现问题:
点击option-1闭合之后,时间刷新的时候会使option-1自动展开,
点击option-2打开之后,时间刷新的时候会使option-2自动闭合。
初看下来感觉是使用vue setTimeout之后改变now之后刷新显示的时候刷新了default-openeds相关的配置。

请问该如何解决。

问题补充:

<div id="body">

<div>{{now}}</div><el-button @click="get_date()">刷时间</el-button>

<el-menu :default-openeds="['1']">

<el-submenu index="1">

<template slot="title"><i class="el-icon-menu"></i>功能列表</template>

<el-menu-item>option-1</el-menu-item>

<el-menu-item-group title="option-1-1">

<el-menu-item>option-1-1-1</el-menu-item>

<el-menu-item>option-1-1-2</el-menu-item>

</el-menu-item-group>

</el-submenu>

<el-submenu index="2">

<template slot="title"><i class="el-icon-menu"></i>功能列表</template>

<el-menu-item>option-2</el-menu-item>

<el-menu-item-group title="option-2-1">

<el-menu-item>option-2-1-1</el-menu-item>

<el-menu-item>option-2-1-2</el-menu-item>

</el-menu-item-group>

</el-submenu>

</el-menu>

</div>

<script src="https://segmentfault.com/scripts/vue.min.js"></script>

<script src="https://segmentfault.com/element-ui-2.3.7/lib/index.js"></script>

<link rel="stylesheet" href="https://segmentfault.com/element-ui-2.3.7/lib/theme-chalk/index.css" crossorigin="anonymous">

<script type="text/javascript">

var page = new Vue({

el : '#body',

data : {

now : '',

},

mounted : function () {

this.get_date();

},

methods : {

get_date : function() {

this.$set(this, 'now', new Date().toLocaleString(undefined, {hour12:false}));

},

},

});

</script>

改成了按钮刷新时间,同样会触发这个问题。

以上。

回答

<el-menu :default-openeds="['1']"> 这里不要写死,改成下面这样

<el-menu :default-openeds="open_list">
var page = new Vue({
...

data:{

...

open_list: ["1"]

...

},

...
})
如果你没有吧 default-openeds 与 vue 中 data 的某个变量绑定,即使你手动下拉别的菜单,你选中的菜单也没法更新到一个变量中。这样一来如果此时vue 刷新 dom,此时默认展开的菜单还是 ‘1’

以上是 【Vue】element-ui中submenu使用default-opened与vue页面信息刷新的冲突 的全部内容, 来源链接: utcz.com/a/76748.html

回到顶部