# 建構銀行應用程式第一部分:Web 應用程式中的 HTML 模板與路由 ```mermaid journey title 你的銀行應用程式開發旅程 section SPA 基礎知識 了解單頁應用程式: 3: Student 學習模板概念: 4: Student 精通 DOM 操作: 4: Student section 路由系統 實現客戶端路由: 4: Student 處理瀏覽器歷史紀錄: 5: Student 建立導航系統: 5: Student section 專業模式 建立模組化架構: 5: Student 應用最佳實踐: 5: Student 創造使用者體驗: 5: Student ``` 當阿波羅 11 號的導航電腦在 1969 年登月時,它必須在不同的程式間切換,而不重新啟動整個系統。現代的 Web 應用程式也是如此——在不重新載入整個頁面的情況下改變你所看到的內容。這便造就了使用者今天所期望的順暢且反應靈敏的體驗。 與傳統網站為每次互動重新載入整個頁面不同,現代 Web 應用程式只更新需要變更的部分。這種方法,就像任務控制中心在維持恆定通訊的同時切換不同的顯示內容一樣,創造出我們所期待的流暢體驗。 以下對比展示了差異的戲劇性: | 傳統多頁應用程式 | 現代單頁應用程式 | |----------------------------|-------------------------| | **導覽** | 每個畫面均重新載入整頁 | 內容即時切換 | | **效能** | 需完整下載 HTML,較慢 | 部分更新,較快 | | **使用者體驗** | 頁面閃爍突兀 | 流暢、類似應用程式過渡效果 | | **資料共享** | 不同頁面間困難 | 狀態管理容易 | | **開發** | 需維護多個 HTML 檔案 | 單一 HTML 搭配動態模板 | **了解演進:** - **傳統應用程式** 每次切換頁面都需向伺服器發送請求 - **現代單頁應用(SPA)** 載入一次後用 JavaScript 動態更新內容 - **使用者期望** 是即時且無縫的互動體驗 - **效能優勢** 包括帶寬節省和更快速回應 在本課程中,我們將建構一個多畫面且流暢銜接的銀行應用程式。就像科學家使用可模組化的儀器,根據不同實驗重新配置一樣,我們將以 HTML 模板作為可重複使用的元件按需顯示。 你將使用 HTML 模板(不同畫面的可重複藍圖)、JavaScript 路由系統(切換畫面的機制),以及瀏覽器的歷史 API(保持返回按鍵正常運作)。這些是 React、Vue 和 Angular 等框架所用的基礎技術。 課程結束時,你將擁有一個示範專業單頁應用原則的工作銀行應用。 ```mermaid mindmap root((單頁應用程式)) Architecture Template System Client-side Routing State Management Event Handling Templates 可重用元件 動態內容 DOM 操作 內容切換 Routing URL 管理 歷史記錄 API 導航邏輯 浏覽器整合 User Experience 快速導航 平滑過渡 狀態一致性 現代互動 Performance 減少伺服器請求 更快頁面過渡 高效資源使用 更佳回應速度 ``` ## 課前測驗 [課前測驗](https://ff-quizzes.netlify.app/web/quiz/41) ### 你需要準備的東西 我們需要一個本地 Web 伺服器來測試銀行應用程式——別擔心,這比聽起來簡單!如果你尚未設置,只要安裝 [Node.js](https://nodejs.org) 並在專案資料夾中執行 `npx lite-server` 指令。這條方便的指令會啟動一個本地伺服器並自動在瀏覽器打開你的應用程式。 ### 預備工作 在你的電腦上,建立一個名為 `bank` 的資料夾,並在此資料夾內放入一個 `index.html` 檔案。我們會從這個 HTML [樣板](https://en.wikipedia.org/wiki/Boilerplate_code)開始: ```html Bank App ``` **這個樣板包含的內容說明:** - **建立** HTML5 文件結構,並正確宣告 DOCTYPE - **設定** 字元編碼為 UTF-8以支援國際文字 - **啟用** 透過 viewport meta 標籤實現響應式設計以兼容行動裝置 - **設定** 一個描述性標題,會顯示在瀏覽器頁籤上 - **建立** 一個乾淨的 區域作為我們應用程式的基礎 > 📁 **專案結構預覽** > > **完成本課程後,你的專案會包含:** > ``` > bank/ > ├── index.html > ├── app.js > └── style.css > ``` > > **檔案功能說明:** > - **index.html**:包含所有模板並建構應用架構 > - **app.js**:處理路由、導覽與模板管理 > - **Templates**:定義登入、儀表板及其他畫面的 UI --- ## HTML 模板 模板解決了 Web 開發中的一個基本問題。當 Gutenberg 在 1440 年代發明可動式活字印刷時,他發現不用刻整頁,而是可以製作可重用的字母字塊,並根據需要排列。HTML 模板也是同樣的原理——不用為每個畫面建立獨立的 HTML 檔,而是定義可重用結構,再在需要時顯示。 ```mermaid flowchart TD A["📋 模板定義"] --> B["💬 在 DOM 中隱藏"] B --> C["🔍 JavaScript 尋找模板"] C --> D["📋 複製模板內容"] D --> E["🔗 附加到可見 DOM"] E --> F["👁️ 用戶看到內容"] G["登入模板"] --> A H["儀表板模板"] --> A I["未來的模板"] --> A style A fill:#e3f2fd style D fill:#e8f5e8 style F fill:#fff3e0 style B fill:#f3e5f5 ``` 將模板想像成應用程式不同部分的藍圖。就像建築師繪製一個藍圖並多次使用,而不是重畫相同房間一樣,我們建立模板一次,需用時實例化。瀏覽器會將這些模板隱藏,直到 JavaScript 啟動它們。 如果你想為網頁建立多個畫面,一種解決方案是為每個畫面建立一個 HTML 檔。然而,這種做法有些不便: - 切換畫面時必須重新載入整個 HTML,速度較慢。 - 不同畫面間共享資料困難。 另一種方法是只用一個 HTML 檔,並使用 `