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>

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

以上。

阅读 24.1k
1 个回答

<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’

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏