鍍金池/ 問答/HTML/ element-ui中submenu使用default-opened與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="/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默認(rèn)打開option-1,關(guān)閉option-2。
但出現(xiàn)問題:
點(diǎn)擊option-1閉合之后,時(shí)間刷新的時(shí)候會(huì)使option-1自動(dòng)展開,
點(diǎn)擊option-2打開之后,時(shí)間刷新的時(shí)候會(huì)使option-2自動(dòng)閉合。
初看下來感覺是使用vue setTimeout之后改變now之后刷新顯示的時(shí)候刷新了default-openeds相關(guān)的配置。

請(qǐng)問該如何解決。

問題補(bǔ)充:

<div id="body">
  <div>{{now}}</div><el-button @click="get_date()">刷時(shí)間</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>

改成了按鈕刷新時(shí)間,同樣會(huì)觸發(fā)這個(gè)問題。

以上。

回答
編輯回答
焚音

<el-menu :default-openeds="['1']"> 這里不要寫死,改成下面這樣

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

data:{
...
    open_list: ["1"]
...
},

...
})
如果你沒有吧 default-openeds 與 vue 中 data 的某個(gè)變量綁定,即使你手動(dòng)下拉別的菜單,你選中的菜單也沒法更新到一個(gè)變量中。這樣一來如果此時(shí)vue 刷新 dom,此時(shí)默認(rèn)展開的菜單還是 ‘1’

2018年6月6日 17:24