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="/scripts/vue.min.js"></script>
<script src="/element-ui-2.3.7/lib/index.js"></script>
<link rel="stylesheet" href="/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版本如图。

页面显示为:
图片描述

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="/scripts/vue.min.js"></script>
<script src="/element-ui-2.3.7/lib/index.js"></script>
<link rel="stylesheet" href="/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’

暂无评论

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注