vuejs之結合使用vue+element-ui搭建后台管理頁面


1、新建一個vue項目

2、安裝element-ui

進入到該項目目錄,輸入:npm install --save element-ui

之后可以在package.json中查看是否下載了相關依賴

最后在main.js中加入:

import ElementUI from 'element-ui'
import 'element-ui/lib/theme-chalk/index.css'

Vue.use(ElementUI)

3、引入相關模板

去到element官網,找到布局容器,選擇一個模板將其內容替換App.vue中的內容,例如:

<template>
  <div id="app">
    <el-container style="height: 500px; border: 1px solid #eee">
      <el-aside width="200px"
                style="background-color: rgb(238, 241, 246)">
        <el-menu :default-openeds="['1', '3']">
          <el-submenu index="1">
            <template slot="title">
              <i class="el-icon-message"></i>導航一</template>
            <el-menu-item-group>
              <template slot="title">分組一</template>
              <el-menu-item index="1-1">選項1</el-menu-item>
              <el-menu-item index="1-2">選項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">選項4-1</el-menu-item>
            </el-submenu>
          </el-submenu>
          <el-submenu index="2">
            <template slot="title">
              <i class="el-icon-menu"></i>導航二</template>
            <el-menu-item-group>
              <template slot="title">分組一</template>
              <el-menu-item index="2-1">選項1</el-menu-item>
              <el-menu-item index="2-2">選項2</el-menu-item>
            </el-menu-item-group>
            <el-menu-item-group title="分組2">
              <el-menu-item index="2-3">選項3</el-menu-item>
            </el-menu-item-group>
            <el-submenu index="2-4">
              <template slot="title">選項4</template>
              <el-menu-item index="2-4-1">選項4-1</el-menu-item>
            </el-submenu>
          </el-submenu>
          <el-submenu index="3">
            <template slot="title">
              <i class="el-icon-setting"></i>導航三</template>
            <el-menu-item-group>
              <template slot="title">分組一</template>
              <el-menu-item index="3-1">選項1</el-menu-item>
              <el-menu-item index="3-2">選項2</el-menu-item>
            </el-menu-item-group>
            <el-menu-item-group title="分組2">
              <el-menu-item index="3-3">選項3</el-menu-item>
            </el-menu-item-group>
            <el-submenu index="3-4">
              <template slot="title">選項4</template>
              <el-menu-item index="3-4-1">選項4-1</el-menu-item>
            </el-submenu>
          </el-submenu>
        </el-menu>
      </el-aside>

      <el-container>
        <el-header style="text-align: right; font-size: 12px">
          <el-dropdown>
            <i class="el-icon-setting"
               style="margin-right: 15px"></i>
            <el-dropdown-menu slot="dropdown">
              <el-dropdown-item>查看</el-dropdown-item>
              <el-dropdown-item>新增</el-dropdown-item>
              <el-dropdown-item>刪除</el-dropdown-item>
            </el-dropdown-menu>
          </el-dropdown>
          <span>王小虎</span>
        </el-header>

        <el-main>
          <el-table :data="tableData">
            <el-table-column prop="date"
                             label="日期"
                             width="140">
            </el-table-column>
            <el-table-column prop="name"
                             label="姓名"
                             width="120">
            </el-table-column>
            <el-table-column prop="address"
                             label="地址">
            </el-table-column>
          </el-table>
        </el-main>
      </el-container>
    </el-container>
  </div>
</template>

<style>
.el-header {
  background-color: #b3c0d1;
  color: #333;
  line-height: 60px;
}

.el-aside {
  color: #333;
}
</style>

<script>
export default {
  data () {
    const item = {
      date: '2016-05-02',
      name: '王小虎',
      address: '上海市普陀區金沙江路 1518 弄'
    };
    return {
      tableData: Array(20).fill(item)
    }
  }
};
</script>

此時頁面效果:

element-ui相關標簽說明:

el-container:構建整個頁面框架

el-aside:構建左側菜單

el-menu:左側菜單內容,常用屬性:

  • :default-openeds:默認展開的菜單,通過index屬性進行設置。例如在el-submenu中的index='1',如果在這里設置default-openeds='["1"]',說明默認打開的index=1的子菜單。
  • :default-active:默認選中。可以這么設置:default-active=" '1-1' "。

el-submenu:可展開的菜單,常用屬性:

  • index:菜單的下標,文本類型,不能是數字類型。

template:對應el-submenu的菜單名,可以在其設置菜單圖標,通過i標簽的class屬性。

el-menu-item:菜單的子節點,不可再展開。index屬性值為文本類型。

我們可以改造成這樣:即再添加一級菜單。
<template>
  <div id="app">
    <el-container style="height: 500px; border: 1px solid #eee">
      <el-aside width="200px"
                style="background-color: rgb(238, 241, 246)">
        <el-menu :default-openeds="['1']"
                 :default-active="'1-1'">
          <el-submenu index="1">
            <template slot="title">
              <i class="el-icon-message"></i>導航一</template>
            <el-menu-item index="1-1">選項1</el-menu-item>
            <el-menu-item index="1-2">選項2</el-menu-item>
            <el-submenu index="1-3">
              <template slot="title">選項3</template>
              <el-menu-item index="1-3-1">選項1-3-1</el-menu-item>
              <el-menu-item index="1-3-2">選項1-3-2</el-menu-item>
            </el-submenu>
          </el-submenu>

          <el-submenu index="2">
            <template slot="title">
              <i class="el-icon-menu"></i>導航二</template>
            <el-menu-item index="2-1">選項1</el-menu-item>
            <el-menu-item index="2-2">選項2</el-menu-item>
          </el-submenu>

        </el-menu>
      </el-aside>

      <el-container>
        <el-header style="text-align: right; font-size: 12px">
          <el-dropdown>
            <i class="el-icon-setting"
               style="margin-right: 15px"></i>
            <el-dropdown-menu slot="dropdown">
              <el-dropdown-item>查看</el-dropdown-item>
              <el-dropdown-item>新增</el-dropdown-item>
              <el-dropdown-item>刪除</el-dropdown-item>
            </el-dropdown-menu>
          </el-dropdown>
          <span>王小虎</span>
        </el-header>

        <el-main>
          <el-table :data="tableData">
            <el-table-column prop="date"
                             label="日期"
                             width="140">
            </el-table-column>
            <el-table-column prop="name"
                             label="姓名"
                             width="120">
            </el-table-column>
            <el-table-column prop="address"
                             label="地址">
            </el-table-column>
          </el-table>
        </el-main>
      </el-container>
    </el-container>
  </div>
</template>

<style>
.el-header {
  background-color: #b3c0d1;
  color: #333;
  line-height: 60px;
}

.el-aside {
  color: #333;
}
</style>

<script>
export default {
  data () {
    const item = {
      date: '2016-05-02',
      name: '王小虎',
      address: '上海市普陀區金沙江路 1518 弄'
    };
    return {
      tableData: Array(20).fill(item)
    }
  }
};
</script>

當前效果:

4、動態顯示菜單

在views下新建幾個頁面,PageOne.vue、PageTwo.vue、PageThree.vue、PageFour.vue,里面內容基本相同。比如PageOne就是

<template>
  <div>
    <h1>這是page1</h1>
  </div>
</template>

<script>
</script>

<style scoped>
</style>

接下來要了解vue的整體圖:

藍色部分是vue服務,紅色部分是入口,也就是App.vue,橙色部分是我們的頁面。我們要將一開始的element代碼,轉移到黃色區域里面,不然的話會出現紅色和橙色區域里都會出現菜單欄,因為我們的頁面是從主入口進入的。

在views下新建一個Index.vue

<template>
  <div>
    <el-container style="height: 500px; border: 1px solid #eee">
      <el-aside width="200px"
                style="background-color: rgb(238, 241, 246)">
        <el-menu :default-openeds="['0','1']" :router="$route">
          <el-submenu v-for="(item,index) in $router.options.routes"
                      :key="index"
                      :index="index+''">
            <template slot="title">
              <i class="el-icon-message"></i>{{item.name}}</template>
            <el-menu-item v-for="(item2, index2) in item.children"
                          :key="index2" :index="item2.path" :class="$route.path==item2.path?'is-active':''">{{item2.name}}</el-menu-item>
          </el-submenu>

        </el-menu>
      </el-aside>

      <el-container>
        <el-header style="text-align: right; font-size: 12px">
          <el-dropdown>
            <i class="el-icon-setting"
               style="margin-right: 15px"></i>
            <el-dropdown-menu slot="dropdown">
              <el-dropdown-item>查看</el-dropdown-item>
              <el-dropdown-item>新增</el-dropdown-item>
              <el-dropdown-item>刪除</el-dropdown-item>
            </el-dropdown-menu>
          </el-dropdown>
          <span>王小虎</span>
        </el-header>

        <el-main>
          <router-view></router-view>
        </el-main>
      </el-container>
    </el-container>
  </div>
</template>

<script>
</script>

<style scoped>
</style>

使用v-for遍歷出一級菜單,再使用v-for遍歷二級菜單。首先要給el-menu加上:router屬性,然后利用router-view進行渲染,最后要實現點擊不同菜單顯示不同界面要設置::index="item2.path"。為了點擊時對菜單進行高亮,如果點擊的當前頁面和菜單對應,就加上class="is-active"。

router/index.js

import Vue from 'vue'
import VueRouter from 'vue-router'
import Home from '../views/Home.vue'
import Test from '../views/Test.vue'
import PageOne from '../views/PageOne.vue'
import PageTwo from '../views/PageTwo.vue'
import PageThree from '../views/PageThree.vue'
import PageFour from '../views/PageFour.vue'
import Index from '../views/Index.vue'

Vue.use(VueRouter)

const routes = [
  {
    path: "/",
    name: "導航一",
    component: Index,
    redirect: "/pageOne",
    children: [
      {
        path: '/pageOne',
        name: '頁面一',
        component: PageOne,
      },
      {
        path: '/pageTwo',
        name: '頁面二',
        component: PageTwo,
      },
    ]
  },
  {
    path: "/navigation",
    name: "導航二",
    component: Index,
    children: [
      {
        path: '/pageThree',
        name: '頁面三',
        component: PageThree,
      },
      {
        path: '/pageFour',
        name: '頁面四',
        component: PageFour,
      },
    ]
  },

]

const router = new VueRouter({
  mode: 'history',
  base: process.env.BASE_URL,
  routes
})

export default router

這里的redirect用於直接跳轉到PageOne.vue。

App.vue

<template>
  <div id="app">
    <router-view></router-view>
  </div>
</template>

<style>
.el-header {
  background-color: #b3c0d1;
  color: #333;
  line-height: 60px;
}

.el-aside {
  color: #333;
}
</style>

<script>
export default {
  data () {
    const item = {
      date: '2016-05-02',
      name: '王小虎',
      address: '上海市普陀區金沙江路 1518 弄'
    };
    return {
      tableData: Array(20).fill(item)
    }
  }
};
</script>

vue中的模板可以用<router-view></router-view>進行替換這里替換了兩次,一次是菜單欄替換App.vue中的,另一次是PageOne等頁面替換Index.vue中的。

最后結果:啟動服務器之后會直接到第一個頁面。

點擊其他頁面會顯示其他頁面的信息,並對該菜單進行高亮:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM