# 建立銀行應用程式 第一部分:HTML 模板與網頁應用程式中的路由 ```mermaid journey title 您的銀行應用程式開發旅程 section SPA 基礎 了解單頁應用程式: 3: 學生 學習模板概念: 4: 學生 精通 DOM 操作: 4: 學生 section 路由系統 實作客戶端路由: 4: 學生 處理瀏覽器歷史紀錄: 5: 學生 建立導航系統: 5: 學生 section 專業模式 建立模組化架構: 5: 學生 應用最佳實務: 5: 學生 創建使用者體驗: 5: 學生 ``` 當阿波羅11號在1969年登月時,其導航電腦必須在不同程式間切換,卻不需重新啟動整個系統。現代網頁應用程式也類似 — 它們改變你所看到的內容,而非重新載入全部,這讓用戶體驗變得流暢且反應迅速。 不同於傳統網站每次互動都會重新載入整頁,現代網頁應用程式只更新需要改變的部分。這種作法就像任務控制中心在切換不同顯示畫面,同時保持持續通訊,帶來我們所期望的流暢體驗。 使差異如此顯著的原因如下: | 傳統多頁應用程式 | 現代單頁應用程式 | |-----------------|------------------| | **導覽** | 每個畫面重新載入整頁 | 內容即時切換 | | **效能** | 因為完整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 Reusable Components Dynamic Content DOM Manipulation Content Switching Routing URL Management History API Navigation Logic Browser Integration User Experience Fast Navigation Smooth Transitions Consistent State Modern Interactions Performance Reduced Server Requests Faster Page Transitions Efficient Resource Usage Better Responsiveness ``` ## 課前測驗 [課前測驗](https://ff-quizzes.netlify.app/web/quiz/41) ### 所需準備 我們需要一個本地網頁伺服器來測試銀行應用程式 — 不用擔心,這很簡單!如果你還沒設定好,安裝 [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標籤,適用手機裝置 - **設置** 出現在瀏覽器分頁標題的描述性標題 - **創建** 一個乾淨的body區域,讓我們構建應用程式 > 📁 **專案結構預覽** > > **本課結束時,你的專案將包含:** > ``` > bank/ > ├── index.html > ├── app.js > └── style.css > ``` > > **檔案職責分工:** > - **index.html**:包含所有模板並提供應用架構 > - **app.js**:負責路由、導覽與模板管理 > - **模板**:定義登入、儀表板及其他畫面UI --- ## HTML 模板 模板解決了網頁開發中的一個基本問題。當古騰堡在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檔,用 `