vue3中如何實現通用頭部?

xiin發表於2024-10-09

在 Vue 中實現通用頭部可以透過以下幾種方式:

一、使用 Vue 元件

  1. 建立頭部元件
    • 首先,建立一個名為HeaderComponent.vue的 Vue 元件檔案。
    • 在這個元件中,可以使用 Vue 的模板語法來設計頭部的結構,例如包含導航欄、品牌標誌、搜尋框等元素。
   <template>
     <header>
       <div class="logo">品牌標誌</div>
       <nav>
         <ul>
           <li>首頁</li>
           <li>產品</li>
           <li>關於我們</li>
         </ul>
       </nav>
       <div class="search">
         <input type="text" placeholder="搜尋...">
         <button>搜尋</button>
       </div>
     </header>
   </template>
  • <script>標籤中,可以新增元件的邏輯部分,例如處理導航欄的點選事件等。
   export default {
     name: 'HeaderComponent',
     methods: {
       handleNavClick(item) {
         // 處理導航欄點選事件的邏輯
         console.log(`點選了 ${item}`);
       }
     }
   };
  1. 在其他頁面中引入頭部元件
    • 在需要使用通用頭部的頁面元件中,透過import語句引入頭部元件。
   import HeaderComponent from './HeaderComponent.vue';
  • 在頁面元件的components選項中註冊頭部元件。
   export default {
     name: 'PageComponent',
     components: {
       HeaderComponent
     }
   };
  • 在頁面元件的模板中使用頭部元件。
   <template>
     <div>
       <HeaderComponent />
       <!-- 頁面的其他內容 -->
     </div>
   </template>

二、使用 Vuex 管理全域性狀態

如果頭部需要顯示一些全域性狀態,例如使用者登入狀態、購物車數量等,可以使用 Vuex 來管理這些狀態。

  1. 安裝和配置 Vuex
    • 安裝 Vuex:npm install vuex
    • 建立一個store.js檔案來配置 Vuex 儲存。
   import Vue from 'vue';
   import Vuex from 'vuex';

   Vue.use(Vuex);

   const store = new Vuex.Store({
     state: {
       isLoggedIn: false,
       cartCount: 0
     },
     mutations: {
       setLoggedIn(state, value) {
         state.isLoggedIn = value;
       },
       incrementCartCount(state) {
         state.cartCount++;
       }
     }
   });

   export default store;
  1. 在頭部元件中獲取全域性狀態
    • 在頭部元件中,可以透過this.$store.state來訪問全域性狀態。
   <template>
     <header>
       <div class="logo">品牌標誌</div>
       <nav>
         <ul>
           <li v-if="!$store.state.isLoggedIn">登入</li>
           <li v-if="$store.state.isLoggedIn">個人中心</li>
           <li>購物車({{$store.state.cartCount}})</li>
         </ul>
       </nav>
     </header>
   </template>

三、動態配置頭部

有時候,頭部的內容可能需要根據不同的頁面或條件進行動態配置。可以透過 props 或 Vuex 的狀態來實現動態配置。

  1. 使用 props
    • 在頭部元件中定義 props,接收來自父元件的配置資訊。
   export default {
     name: 'HeaderComponent',
     props: {
       showSearch: {
         type: Boolean,
         default: true
       }
     }
   };
  • 在使用頭部元件的頁面中,可以透過 props 傳遞不同的值來控制頭部的顯示內容。
   <template>
     <div>
       <HeaderComponent :show-search="false" />
       <!-- 頁面的其他內容 -->
     </div>
   </template>
  1. 使用 Vuex 狀態
    • 在 Vuex 的儲存中新增一個狀態,用於控制頭部的顯示內容。
   const store = new Vuex.Store({
     state: {
       showSearchOnHeader: true
     },
     mutations: {
       toggleSearchOnHeader(state) {
         state.showSearchOnHeader =!state.showSearchOnHeader;
       }
     }
   });
  • 在頭部元件中,根據 Vuex 的狀態來決定是否顯示搜尋框。
   <template>
     <header>
       <div class="logo">品牌標誌</div>
       <nav>
         <ul>
           <li>首頁</li>
           <li>產品</li>
           <li>關於我們</li>
         </ul>
       </nav>
       <div v-if="$store.state.showSearchOnHeader" class="search">
         <input type="text" placeholder="搜尋...">
         <button>搜尋</button>
       </div>
     </header>
   </template>

透過以上方法,可以在 Vue 專案中實現一個通用的頭部元件,並且可以根據不同的需求進行動態配置和管理全域性狀態。

相關文章