zoukankan      html  css  js  c++  java
  • vue 使用element 菜单与tab页联动

    没找到比较好的方法 自己写了一个

    <template>
      <div class="ucen-menubar menu">
        <div class="sider">
          <el-menu class="el-menu-vertical-demo siderBar" background-color="#2A2E3C" text-color="#fff">
            <el-submenu :index="''+index" v-for="(item,index) in menus" :key="index" :class="item.class">
              <template slot="title">
                <span class="titleIcon"></span>
                <span>{{item.menuName}}</span>
              </template>
                <el-menu-item :index="index+'-'+num" v-for="(data,num) in item.data" :key="num"  @click="addTab(data)">
                  <span :class="data.class"></span>
                  <span slot="title">{{data.name}}</span>
                </el-menu-item>
            </el-submenu>
          </el-menu>
        </div>
        <div class="content">
          <el-tabs v-model="TabsValue" type="card" closable @tab-remove="removeTab">
            <el-tab-pane v-for="(item, index) in Tabs" :key="item.name" :label="item.title" :name="item.name">
              <tab-component :is="item.content" :name="item.name"></tab-component>
            </el-tab-pane>
          </el-tabs>
        </div>
      </div>
    </template>
    <script>
    import Vue from "vue";
    import Bus from "@/assets/js/vendor/bus.js";
    export default {
      name: "UcenMenubar",
      props: ["gradfrom", "menus"],
      components: { appMenu },
      data() {
        return {
          show: false,
          TabsValue: "",
          value: "",
          input: "",
          Tabs: []
        };
      },
      created() {
        let that = this;
        Bus.$on("openNewTab", function(name) {
          that.openTab(name);
        }),
          Bus.$on("NewTab", function(name) {
            that.openTab(name);
          });
        Bus.$on("NewManyTab", function(name) {
          that.openTabMany(name);//链接打开多个页面
        });
      },
      beforeDestroy() {
        Bus.$off("openNewTab", name);
        Bus.$off("NewTab", name);
        Bus.$off("NewManyTab", name);
      },
      methods: {
        // 打开多个页面
        openTabMany(name) {
          for (var m = 0; m < this.menus.length; m++) {
            for (var n = 0; n < this.menus[m].data.length; n++) {
              var ser = this.menus[m].data;
              if (ser[n].name == name.name) {
                this.addTabMany(ser[n], name.tabname);
              }
            }
          }
        },
        addTabMany(menu, tabname) {
          var exist = false;
          for (var i = 0; i < this.Tabs.length; i++) {
            if (tabname == this.Tabs[i].title) {
              exist = true;
              break;
            }
          }
          if (exist == true) {
            this.TabsValue = tabname;
            return;
          }
          this.Tabs.push({
            title: tabname,
            name: tabname,
            showItem: menu.showItem,
            content: menu.component
          });
          this.TabsValue = tabname;
        },
        // 跳转页面
        openTab(name) {
          for (var m = 0; m < this.menus.length; m++) {
            for (var n = 0; n < this.menus[m].data.length; n++) {
              var ser = this.menus[m].data;
              if (ser[n].name == name) {
                this.addTab(ser[n]);
              }
            }
          }
        },
        // 菜单打开页面
        addTab(menu) {
          var exist = false;
          for (var i = 0; i < this.Tabs.length; i++) {
            if (menu.name == this.Tabs[i].name) {
              exist = true;
              break;
            }
          }
          if (exist == true) {
            this.TabsValue = menu.name;
            return;
          }
          this.Tabs.push({
            title: menu.name,
            name: menu.name,
            showItem: menu.showItem,
            content: menu.component
          });
          this.TabsValue = menu.name;
        },
        //remove
        removeTab(targetName) {
          let tabs = this.Tabs;
          let activeName = this.TabsValue;
          if (activeName === targetName) {
            tabs.forEach((tab, index) => {
              if (tab.name === targetName) {
                let nextTab = tabs[index + 1] || tabs[index - 1];
                if (nextTab) {
                  activeName = nextTab.name;
                }
              }
            });
          }
    
          this.TabsValue = activeName;
          this.Tabs = tabs.filter(tab => tab.name !== targetName);
        }
      }
    };
    </script>
    <!-- Add "scoped" attribute to limit CSS to this component only -->
  • 相关阅读:
    我的UI启蒙之路
    关于UI设计行业的认识再到认识
    谈谈我对Ui设计师的一些观点
    Web前端工程师常去的15个技术网站
    Banner中文字怎么排版才好看?
    UI设计师经常去的五个网站
    PS快捷键大全,记住这些就够了!
    UI设计师如何提升审美?
    170. Two Sum III
    169. Majority Element
  • 原文地址:https://www.cnblogs.com/cindy-hmy/p/9297988.html
Copyright © 2011-2022 走看看