# 建立銀行應用程式第一部分:網頁應用程式中的 HTML 模板與路由 當阿波羅 11 號的導航電腦在 1969 年引導登月時,它需要在不同的程式之間切換,而不需要重新啟動整個系統。現代的網頁應用程式也採用類似的方式運作——它們改變您所看到的內容,而不需要從頭重新載入所有內容。這種方式創造了使用者今日所期望的流暢、快速的使用體驗。 與傳統網站每次互動都需要重新載入整個頁面不同,現代網頁應用程式僅更新需要更改的部分。這種方式就像任務控制中心在保持持續通信的同時在不同顯示器之間切換,創造了我們所期待的流暢體驗。 以下是兩者之間的顯著差異: | 傳統多頁應用程式 | 現代單頁應用程式 | |------------------|------------------| | **導航** | 每個畫面都需要重新載入整個頁面 | 即時內容切換 | | **效能** | 由於需要下載完整的 HTML,速度較慢 | 部分更新,速度更快 | | **使用者體驗** | 頁面閃爍,體驗不流暢 | 流暢,類似應用程式的過渡效果 | | **資料共享** | 頁面之間的資料共享困難 | 狀態管理更容易 | | **開發** | 需要維護多個 HTML 文件 | 單一 HTML 文件,使用動態模板 | **理解演進:** - **傳統應用程式**需要伺服器請求來完成每次的導航操作 - **現代單頁應用程式 (SPA)** 僅需載入一次,並使用 JavaScript 動態更新內容 - **使用者期望**現在更偏好即時、無縫的互動 - **效能優勢**包括減少頻寬使用和更快的響應速度 在本課程中,我們將建立一個銀行應用程式,擁有多個無縫流暢切換的畫面。就像科學家使用可重新配置的模組化儀器進行不同的實驗一樣,我們將使用 HTML 模板作為可重複使用的元件,根據需要顯示。 您將學習使用 HTML 模板(用於不同畫面的可重複使用藍圖)、JavaScript 路由(切換畫面的系統)以及瀏覽器的歷史 API(確保返回按鈕正常運作)。這些是 React、Vue 和 Angular 等框架使用的基本技術。 完成課程後,您將擁有一個展示專業單頁應用程式原則的銀行應用程式。 ## 課前測驗 [課前測驗](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 ``` **這個樣板提供了以下內容:** - **建立**具有正確 DOCTYPE 聲明的 HTML5 文件結構 - **配置**字符編碼為 UTF-8,以支援國際文本 - **啟用**響應式設計,使用 viewport meta 標籤以適應行動裝置 - **設置**描述性標題,顯示在瀏覽器標籤上 - **創建**乾淨的 body 區域,我們將在其中構建應用程式 > 📁 **專案結構預覽** > > **完成本課程後,您的專案將包含:** > ``` > bank/ > ├── index.html > ├── app.js > └── style.css > ``` > > **文件職責:** > - **index.html**:包含所有模板並提供應用程式結構 > - **app.js**:處理路由、導航和模板管理 > - **模板**:定義登入、儀表板及其他畫面的使用者介面 --- ## HTML 模板 模板解決了網頁開發中的一個基本問題。當古騰堡在 1440 年代發明活字印刷時,他意識到與其雕刻整個頁面,不如創建可重複使用的字母塊,並根據需要排列它們。HTML 模板基於相同的原理——與其為每個畫面創建單獨的 HTML 文件,不如定義可重複使用的結構,並在需要時顯示它們。 將模板想像成應用程式不同部分的藍圖。就像建築師創建一個藍圖並多次使用它,而不是重新繪製相同的房間,我們只需創建一次模板,並根據需要進行實例化。瀏覽器會將這些模板隱藏起來,直到 JavaScript 將它們激活。 如果您想為網頁創建多個畫面,一種解決方案是為每個要顯示的畫面創建一個 HTML 文件。然而,這種解決方案存在一些不便: - 切換畫面時需要重新載入整個 HTML,可能會很慢。 - 在不同畫面之間共享資料很困難。 另一種方法是僅使用一個 HTML 文件,並使用 `