Vue3實現簡約型側邊欄的示例代碼

    目錄 1、首先配置好路由地址 2、然后實現頁面入口 3、然后實現AAAAAA和BBBBBB頁面 有時遇到一些需求,需要實現左邊側邊欄為父級菜單,右側內容區的頂部為子級菜單,以及其底部為子級
    目錄
    • 1、首先配置好路由地址
    • 2、然后實現頁面入口
    • 3、然后實現AAAAAA和BBBBBB頁面

    有時遇到一些需求,需要實現左邊側邊欄為父級菜單,右側內容區的頂部為子級菜單,以及其底部為子級菜單對應的模塊內容。

    如此,簡單實現如下:

    1、首先配置好路由地址

    【如:/src/router/index.ts】

    import { createRouter, createWebHashHistory, RouteRecordRaw } from 'vue-router'
    const routes: Array<RouteRecordRaw> = [
      {
        path: '/',
        redirect: '/xxxxxx'
      },
      {
        path: '/xxxxxx',
        name: '帥龍之龍',
        component: () => import('@/views/XXXXXX/index.vue'),
        children: [
          {
            path: '/xxxxxx/aaaaaa',
            name: '赤龍神帝',
            components: { AAAAAA: () => import('@/views/XXXXXX/AAAAAA/index.vue') },
            children: []
          },
          {
            path: '/xxxxxx/bbbbbb',
            name: '待定欄目',
            components: { BBBBBB: () => import('@/views/XXXXXX/BBBBBB/index.vue') },
            children: [],
          },
        ]
      }
    ]
    const router = createRouter({
      history: createWebHashHistory(),
      routes
    })
    export default router

    2、然后實現頁面入口

    【如:/src/views/XXXXXX/index.vue】

    <template>
      <div class="index-page">
        <div class="index-page-navbar">
          <div class="index-page-navbar-item" :class="activePage == 'AAAAAA' ? 'index-page-navbar-active' : ''" @click="handleNavbarItemClick('AAAAAA')">
            <span>赤龍神帝</span>
          </div>
          <div class="index-page-navbar-item" :class="activePage == 'BBBBBB' ? 'index-page-navbar-active' : ''" @click="handleNavbarItemClick('BBBBBB')">
            <span>待定欄目</span>
          </div>
        </div>
        <div class="index-page-content">
          <router-view name="AAAAAA" v-if="activePage == 'AAAAAA'" />
          <router-view name="BBBBBB" v-if="activePage == 'BBBBBB'" />
        </div>
      </div>
    </template>
    <script>
    export default {
      data () {
        return {
          // 當前激活的頁面
          activePage: '',
        }
      },
      watch: {
      },
      created() {
        this.init()
      },
      mounted() {
        // 設置頁面標題
        document.title = '帥龍之龍'
      },
      methods: {
        /**
         * 獲取初始化參數
         */
        async init() {
          this.activePage = 'AAAAAA'
          const query = this.$route.query
          this.handleMatchRouter(this.activePage)
        },
        /**
         * 激活頁面句柄
         */
        handleActivePageChange(activePage) {
          // 點擊 el-tab 頁面時,將 this.$route.query 置為 {}
          this.$route.query = {}
          this.handleMatchRouter(activePage)
        },
        /**
         * 激活頁面句柄
         */
        handleMatchRouter(activePage) {
          const path = this.$route.path
          const b = path.toLowerCase().includes(activePage.toLowerCase())
          if (activePage == 'AAAAAA') {
            if (!b) {
              this.$router.push({
                path: '/xxxxxx/aaaaaa',
                query: this.$route.query,
              }) 
            }
          } else if (activePage == 'BBBBBB') {
            if (!b) {
              this.$router.push({
                path: '/xxxxxx/bbbbbb',
                query: this.$route.query,
              })
            }
          }
        },
        /**
         * 點擊側邊導航欄
         */
        handleNavbarItemClick(item) {
          this.activePage = item
          this.$route.query = {}
          this.handleMatchRouter(item)
        },
      }
    }
    </script>
    <style lang="less" scoped>
      .index-page {
        display: flex;
        flex-direction: row;
        width: 100%;
        height: 100%;
        position: relative;
        background-color: #fff;
        .index-page-navbar {
          flex: none;
          width: 40px;
          height: 100%;
          border-right: 1px solid #dfe1e6;
          .index-page-navbar-item {
            display: grid;
            width: 100%;
            height: 150px;
            background-color: #fff;
            border-bottom: 1px solid #dfe1e6;
            writing-mode: tb-rl;
            text-align: center;
            align-items: center;
            user-select: none;
            cursor: pointer;
            transition: all ease 0.3s;
            span {
              color: #303133;
              font-size: 14px;
              letter-spacing: 1.5px;
            }
          }
          .index-page-navbar-active {
            background-color: #5e7ce0;
            span {
              color: #fff;
            }
          }
        }
        .index-page-content {
          flex: 1;
          position: relative;
          height: 100%;
          margin: 0;
          padding: 0;
          overflow: hidden;
        }
      }
    </style>

    3、然后實現AAAAAA和BBBBBB頁面

    【如:/src/views/XXXXXX/AAAAAA/index.vue? ? /src/views/XXXXXX/BBBBBB/index.vue】

    <template>
      <div style="width: 100%; height: 100%; display: grid; align-items: center; text-align: center">
        <span style="color: #303133; font-size: 14px;">HelloWorld!...</span>
      </div>
    </template>

    4、效果如下:~

    到此這篇關于Vue3實現簡約型側邊欄的示例代碼的文章就介紹到這了,更多相關Vue3 側邊欄內容請搜索技圈網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持技圈網!

    【本文由: 阜寧網站制作 http://www.1234xp.com/funing.html 復制請保留原URL】
    聲明:所有內容來自互聯網搜索結果,不保證100%準確性,僅供參考。如若本站內容侵犯了原著者的合法權益,可聯系我們進行處理。
    發表評論
    更多 網友評論0 條評論)
    暫無評論

    返回頂部

    主站蜘蛛池模板: 国产一区二区三区免费| 久久久精品人妻一区二区三区蜜桃| 免费萌白酱国产一区二区三区 | 亚洲AV美女一区二区三区| 一区二区免费视频| 波多野结衣一区在线观看| 精品亚洲综合在线第一区| 国产成人一区在线不卡 | 中文字幕一区二区人妻性色 | 精品一区二区三区四区电影| 久久精品亚洲一区二区| 美女福利视频一区二区| 国产精品电影一区| 亚洲午夜电影一区二区三区 | 精品国产高清自在线一区二区三区| 午夜天堂一区人妻| 一区二区三区观看免费中文视频在线播放 | 亚洲国产精品无码第一区二区三区| 亚洲AV无码一区二区乱子伦 | 日本精品一区二区三区在线视频一 | 一本AV高清一区二区三区| 三上悠亚国产精品一区| 久久一区二区三区99| 色狠狠色噜噜Av天堂一区| 中文字幕VA一区二区三区| 中文字幕人妻无码一区二区三区| 国产精品一区二区久久精品无码| 精品人妻少妇一区二区三区在线| 国产激情一区二区三区| 免费一区二区三区| av无码免费一区二区三区| 亚洲av无码一区二区三区天堂| 亚洲AV成人精品日韩一区| 在线播放精品一区二区啪视频| 国产成人精品一区二三区| 亚洲日本中文字幕一区二区三区| 久久AAAA片一区二区| 国产精品丝袜一区二区三区 | 美女福利视频一区| 波多野结衣一区二区三区| 国产一区二区三区手机在线观看 |