1. 程式人生 > 實用技巧 >Vue + Node + Element UI 專案(八)_元件封裝

Vue + Node + Element UI 專案(八)_元件封裝

元件封裝的步驟

1、確定元件結構
2、新增元件頁面
3、修改新增的元件頁面和HOME頁面
4、HOME檔案引入模組
5、測試

【注】完成之前沒做完的準備工作
因為以前寫檔名都是採用駝峰法寫,採用的是小寫開頭,但據觀察VUE檔案普遍採用的是大寫開頭,所以要把所有vue檔案的檔名都改成大寫開頭,並在router/index.js中修改

元件結構


【注】你也可以不將Home檔案另存為,個人習慣問題

新增檔案並修改頁面

Header.vue

1、將原來homePage/Home.vue頁面中的

複製到Header.vue中。

2、將涉及引數和方法複製到Header.vue中:

<script>
import mock from '@/mock/index.js';

export default {
  data () {
    return {
     user: {
        name: "penghl",
        avatar: "/static/user_avatar_default.png", //使用者預設頭像地址
        role: "超級管理員"
      }, //使用者名稱
      // userAvatUrl: "/static/user_avatar_default.png", 
      isCollapse: false
    }
  },
  mounted(){
    var user = sessionStorage.getItem("user"); //使用者資訊載入
    if (user) {
      this.user.name = user;
      this.user.avatar = require("@/assets/img/penghl.jpg"); //可否修改成本地目錄?
    }
  },

  methods: {
     // 側邊欄摺疊
    collapseChage() {
      this.isCollapse = !this.isCollapse;
    },

    // 使用者退出登入
    logout: function() {
      this.$confirm ("確認退出嗎?", "提示", {
        type: "warning"
      })
        .then(() => {
          sessionStorage.removeItem("user");
          this.$router.push("/login");
        })
        .catch(() => {});
    }


  }
}
</script>

3、將涉及到的scss複製到Header.vue中或者複製到對應的scss,並引入:

<style src="./Header.scss"  lang="scss"></style>

Header.scss


/* 各種變數  */
@import "./src/assets/layout"; 

/* 各種寬高 */
$--header-height: 48px !default; //頂部的高度


/* 頂部 */
.el-header {
    background-color: $--color-white;
    // height: $--header-height !important;
    line-height: $--header-height;
    box-shadow: 1px 1px 1px rgba(0, 0, 0, .05);
    overflow: hidden;
    padding: 0 $--lenght-xll;
    
    .asibe-btn {
        font-size: $--font-size-extra-large;

        &:hover {
            color: $--color-primary;
        }
    }

    .user-info {
        float: right;
        padding-right: $--lenght-xs;

        .el-avatar {
            position: relative;
            top: 8px;
            margin-right: $--lenght-s;
        }
    }
}

採用相同的方法完成SideBar.vue, Main.vue。

  • 將原來homePage/Home.vue頁面另存為,存到view目錄下,並修改頁面程式碼為:
<template>
  <el-container :style="{ height: clientHeight + 'px' }">
     <!-- 側邊欄 -->
      <SideBar></SideBar>
    <el-container :direction ="conDirection">
       <!-- 頭部區域 -->
      <Header></Header>
      <!-- 主內容區域 -->
      <Main></Main>

    </el-container>
  </el-container>
</template>

在 引入之前做好的模組,並刪除與當前頁面無關的程式碼

import SideBar from "./common/sideBar/SideBar"
import Header from "./common/header/Header"
import Main from "./common/main/Main"

export default {
  name: 'Home',
  components:{
        SideBar,
        Header,
        Main
  },

  data () {
    return {
      clientHeight:'', //el-container 的高度
      conDirection: 'vertical' //el-container對齊方式,不設定這個頁面佈局會出錯
    }
  },

  mounted(){
    this.initHeight(); // 計算el-container 的高度
  },

  methods: {
    //獲取高度
    initHeight(){  
        //獲取瀏覽器可視區域高度
        this.clientHeight =  window.innerHeight;
        // console.log(this.clientHeight);

        window.onresize = () => {  //當視窗或框架發生改變時觸發
          this.clientHeight =  window.innerHeight;
          // console.log(this.clientHeight);
        };
    }
  }

}
</script>
<style lang="scss"></style>

因為我們修改了Home.vue檔案的存放目錄,所以需要在router/index.js進行修改。若沒有修改,則無需調整。

測試

重啟專案,測試是否和原來一樣。