用Vue整合Echarts做數據展示:整合ElementUI+router實現側邊導航欄

新增aside.vue組件

還是從ElementUI用戶指南中copy過來的,只做了一點修改,加了點樣式

<template>
  <div class="aside">
    <el-menu default-active="2"
             class="menu"
             @open="handleOpen"
             @close="handleClose">
      <el-submenu index="1">
        <template slot="title">
          <i class="el-icon-location"></i>
          <span>數據展示</span>
        </template>
        <el-menu-item-group>
          <template slot="title">報表</template>
          <el-menu-item index="1-1">展示圖一</el-menu-item>
          <el-menu-item index="1-2">展示圖二</el-menu-item>
        </el-menu-item-group>
        <el-menu-item-group title="
                        分組2">
          <el-menu-item index="1-3">選項3</el-menu-item>
        </el-menu-item-group>
        <el-submenu index="1-4">
          <template slot="title">選項4</template>
          <el-menu-item index="1-4-1">選項1</el-menu-item>
        </el-submenu>
      </el-submenu>
      <el-menu-item index="2">
        <i class="el-icon-menu"></i>
        <span slot="title">導航二</span>
      </el-menu-item>
      <el-menu-item index="3"
                    disabled>
        <i class="el-icon-document"></i>
        <span slot="title">導航三</span>
      </el-menu-item>
      <el-menu-item index="4">
        <i class="el-icon-setting"></i>
        <span slot="title">導航四</span>
      </el-menu-item>
    </el-menu>
  </div>
</template>

<script>
export default {
  data () {
    return {
      msg: 'Welcome to Your Vue.js App'
    }
  }
}
</script>

<style scoped>
.aside {
  height: 100%;
  overflow: hidden;
}
.menu {
  height: 100%;
  width: 100%;
}
</style>

將aside組件放入主頁內

/router/index.js

import Vue from 'vue'
import Router from 'vue-router'
import HelloWorld from '@/components/HelloWorld'
import aside from '@/components/aside' # 引入自定義的組件且命名


Vue.use(Router)

export default new Router({
  routes: [
    {
      path: '/',
      name: 'HelloWorld',
      component: HelloWorld,
      children: [  //子佈局嵌套
        {
          path: '',
          components: {
            aside: aside
          }
        },
      ]
    }
  ]
})

/components/HelloWorld.vue

<template>
  <div class="main">
    <el-container>
      <el-header>Header</el-header>
      <el-container>
        <el-aside width="10%">
          <!-- 通過路由注入組件  -->
          <router-view name="aside"></router-view>
        </el-aside>
        <el-container>
          <el-main>main</el-main>
        </el-container>
      </el-container>
    </el-container>
  </div>
</template>

效果圖

在這裏插入圖片描述

實現路由跳轉

新增兩個組件char1.vue 和 char2.vue
在這裏插入圖片描述

char1.vue

<template>
  <div class="char1">
    展示圖一
  </div>
</template>
<style scoped>
.char1 {
  height: 100%;
  width: 100%;
  text-align: center;
  line-height: 160px;
}
</style>

char2.vue

<template>
  <div class="char2">
    展示圖二
  </div>
</template>
<style scoped>
.char2 {
  height: 100%;
  width: 100%;
  text-align: center;
  line-height: 160px;
}
</style>
  1. 註冊路由

    /router/index.js

    import Vue from 'vue'
    import Router from 'vue-router'
    import HelloWorld from '@/components/HelloWorld'
    import aside from '@/components/aside'
    # 引入自定義組件
    import char1 from '@/components/echars/char1'
    import char2 from '@/components/echars/char2'
    
    
    Vue.use(Router)
    
    export default new Router({
      routes: [
        {
          path: '/',
          name: 'HelloWorld',
          component: HelloWorld,
          children: [
            {
              path: '',
              components: {
                aside: aside
              }
            },
            {
                //註冊路由,這裏千萬別寫成/char1
              path: 'char1',
              components: {
                aside: aside,
                main: char1
              }
            },
            {
              path: 'char2',
              components: {
                aside: aside,
                main: char2
              }
            },
          ]
        }
      ]
    })
    
    

    /components/HelloWorld.vue

    <template>
      <div class="main">
        <!-- 直接複製過來的 -->
        <el-container>
          <el-header>Header</el-header>
          <el-container>
            <el-aside width="10%">
              <router-view name="aside"></router-view>
            </el-aside>
            <el-container>
              <el-main>
                  //給main容器也添加上路由
                <router-view name="main"></router-view>
              </el-main>
            </el-container>
          </el-container>
        </el-container>
      </div>
    </template>
    

    添加響應事件

    aside.vue

    <template>
      <div class="aside">
        <el-menu default-active="2"
                 class="menu"
                 @open="handleOpen"
                 @close="handleClose">
          <el-submenu index="1">
            <template slot="title">
              <i class="el-icon-location"></i>
              <span>數據展示</span>
            </template>
            <el-menu-item-group>
              <template slot="title">報表</template>
                <!-- @click 點擊響應事件  調用了jump函數 -->
              <el-menu-item index="1-1" @click="jump('/char1')">展示圖一</el-menu-item>
              <el-menu-item index="1-2" @click="jump('/char2')">展示圖二</el-menu-item>
            </el-menu-item-group>
            <el-menu-item-group title="分組2">
              <el-menu-item index="1-3">選項3</el-menu-item>
            </el-menu-item-group>
            <el-submenu index="1-4">
              <template slot="title">選項4</template>
              <el-menu-item index="1-4-1">選項1</el-menu-item>
            </el-submenu>
          </el-submenu>
          <el-menu-item index="2">
            <i class="el-icon-menu"></i>
            <span slot="title">導航二</span>
          </el-menu-item>
          <el-menu-item index="3"
                        disabled>
            <i class="el-icon-document"></i>
            <span slot="title">導航三</span>
          </el-menu-item>
          <el-menu-item index="4">
            <i class="el-icon-setting"></i>
            <span slot="title">導航四</span>
          </el-menu-item>
        </el-menu>
      </div>
    </template>
    
    <script>
    export default {
      data () {
        return {
          msg: 'Welcome to Your Vue.js App'
        }
      },
      methods: {
        jump (url) {
          //向當前路由後面追加一段url
          this.$router.push(url)
        },
      }
    }
    

    測試效果圖

在這裏插入圖片描述

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章