Skip to main content

什麼是 Vue.js

Vue.js(以下簡稱 Vue)是用於建構使用者介面的漸進式 JavaScript 框架。「漸進式」意指可以從小規模開始,並依需要追加功能,既能部分嵌入既有 HTML 頁面,也能建構大規模的 SPA。 Vue 的核心是反應式。當資料變化時 DOM 會自動更新,因此開發者不需要手動管理「何時、更新哪個元素」。
本頁介紹的是 Vue 3 與 Inertia v3 的組合。Laravel 13 的入門套件預設使用此組合。

Options API 與 Composition API

Vue 3 提供了兩種撰寫元件的風格:Options APIComposition API Options API 是延續 Vue 2 的傳統風格。以 datamethodscomputedmounted 等選項物件定義元件。
Composition API 是 Vue 3 導入的新風格。結合 <script setup> 語法後可以更簡潔地撰寫。邏輯的可重用性也更高,與 TypeScript 相容性也很好。
Inertia × Laravel 的入門套件標準採用 <script setup> 的 Composition API 風格。本頁範例也全部以 <script setup> 撰寫。

在 Laravel 中的定位

歷史

Vue 與 Laravel 的關係歷史悠久,可追溯至 Laravel 5.3(2016 年) 採用 Vue 作為預設前端框架。當時的 package.json 中就包含 Vue,並附有 resources/js/components/ExampleComponent.vue 這樣的範例元件。 Laravel 6(2019 年) 將認證 scaffold 切分為 laravel/ui 套件,Vue 的 scaffold 也移至該套件。目前主流是透過 laravel new 的入門套件選擇 Inertia + Vue 組合。 對 Laravel 使用者來說,Vue 是最熟悉的 JS 框架,日文學習資源也很豐富。

目前的主流方式:Inertia × Vue

目前 Laravel 中使用 Vue 的主要方式是 Inertia × Vue。Inertia 可以不設計 API,直接從 Laravel 的 controller 將資料傳給 Vue 元件,實現「現代單體式」架構。

安裝設定

透過入門套件(推薦)

要新建專案時,使用入門套件是最方便的方式。
在互動式提示中選擇 Vue,以下項目就會全部自動設定完成。
  • inertiajs/inertia-laravel(伺服器端 adapter)
  • @inertiajs/vue3(客戶端 adapter)
  • vue(Vue 3 主體)
  • @vitejs/plugin-vue(Vite plugin)
  • HandleInertiaRequests middleware
  • 登入、註冊等認證畫面(以 Inertia + Vue 實作完畢)

手動安裝

要加入既有專案時,需將伺服器端與客戶端分開安裝。
接著,在 vite.config.js 中加入 Vue plugin。
resources/js/app.js 啟動 Inertia 應用。
手動安裝的詳情(root template 設定、middleware 註冊等)請參考 Inertia 官方文件

目錄結構

入門套件將 Vue 的頁面元件放在 resources/js/pages/ 目錄下。
寫成 Inertia::render('Posts/Index', [...]) 時,resources/js/pages/Posts/Index.vue 就會是對應的元件。

Vue 模板語法

介紹讀寫入門套件程式碼所需的基本模板 directive。

{{ }} — 變數展開

使用雙大括號將 JavaScript 值或運算式內嵌到模板中。

v-if — 條件分支

相當於 Svelte 的 {#if} 或 React 的三元運算子。

v-for — 清單渲染

為了高效的差異更新,:key 必須指定。相當於 React 的 Array.map()

v-model — 雙向繫結

使用 v-model 可讓表單元素的值與反應式變數進行雙向同步。

: (v-bind) 與 @ (v-on)

  • :attr="value" — 對 HTML 屬性動態繫結值(v-bind:attr 的簡寫)
  • @event="handler" — 註冊事件監聽器(v-on:event 的簡寫)

頁面元件的基本

Inertia 的頁面元件就是一般的 Vue 元件。可將從 Laravel controller 傳入的資料作為 props 接收。

Controller

Vue 頁面元件

只要以 defineProps() 宣告 props,就能在模板中使用 controller 傳入的資料。不需要定義 REST API。
使用 @inertiajs/vue3 提供的 <Link> 元件時,頁面切換以 XHR 進行,可避免瀏覽器整頁重新載入。
寫法與一般 <a> 標籤相同,但背後 Inertia 只會替換頁面元件,帶來如 SPA 般的操作體驗。

Form 元件

@inertiajs/vue3 提供的 <Form> 元件是入門套件認證畫面中所採用的表單送出推薦寫法。以 props 指定 actionmethod,用 v-slot 存取 errorsprocessing

基本用法

v-slot="{ errors, processing }" 是 Vue 的 scoped slot 語法,Form 元件會自動計算這些值並傳入。表單欄位不使用 v-model,而是使用 HTML 原生的 name 屬性,讓瀏覽器標準的表單資料蒐集機制正常運作。

入門套件的模式

入門套件使用 Wayfinder 以物件形式管理路由。store.form() 會回傳包含路由物件 actionmethod 的物件,用 v-bind spread 到 <Form>
指定為 reset-on-success 的欄位會在送出成功時自動重設。適用於密碼欄位等送出後想清空的欄位。
若不使用 Wayfinder,也可直接傳入 action="/login" 之類的 URL,效果相同。

useForm helper

表單處理使用 @inertiajs/vue3useForm helper。可以簡潔地實作表單狀態管理、送出與驗證錯誤顯示。

Controller 側

Vue 表單元件

以下整理 useForm 回傳物件的主要屬性。 當驗證錯誤返回時,useForm 會保留輸入內容並顯示錯誤。搭配 v-model 即可實現無縫的表單體驗。

共享資料(Shared Data)

所有頁面都需要的共通資料(登入使用者資訊、flash 訊息等),在 HandleInertiaRequests middleware 的 share() 方法中定義。
在 Vue 元件中透過 usePage() 存取共享資料。
共享資料會包含在所有請求中,因此建議只放最必要的資料。使用 fn() 進行 lazy 求值時,只在實際被存取時才會被求值。

Vue 3 反應式基礎

以下介紹以 Inertia × Vue 開發時,需要了解的 Vue 3 反應式 API。

ref — 原始型反應式值

computed — 計算屬性

onMounted — 掛載後處理


總結

Vue.js 與 Laravel 相容性極佳,特別是透過 Inertia 的「現代單體式」架構下能發揮實力。 使用 Inertia × Vue 可同時享有 Laravel 後端的簡潔性與 Vue 反應式 UI 兩者的優點。使用入門套件建立專案時,包含認證畫面在內都能立即開始開發。

Inertia.js 官方文件

Inertia v3 完整功能請參考官方文件。
最後修改於 2026年8月2日