自主學習入口/mount boundary 與 DOM template 限制 LESSON-19 · TOPIC 02
mount boundary 與 DOM template 限制
能只讓 Vue 接管指定 mount container,並證明外部靜態 shell 不會因內部反應式更新而被改寫。
code-editVue CDN 應用邊界與載入|mount boundary 與 DOM template 限制本頁只練一個責任
本頁只練什麼
能只讓 Vue 接管指定 mount container,並證明外部靜態 shell 不會因內部反應式更新而被改寫。
商用多頁站常只在一小區使用 Vue;mount 範圍過大會把導覽、SEO 內容或既有事件一起交給 Vue。
要修改的檔案:files/starter/main.js
定位:先數 #app 是否唯一,再把 mount 前的 shell.textContent 保存。|依 starter-2 定位,只修改「mount boundary 與 DOM template 限制」的責任。
任務情境
先結果,再原理;完成後要能說出自己看見的證據。
現在的問題
為一個計數器把整個 body mount,結果靜態導覽內容被替換。
起始狀態:shell 與 #app 並列,#app 尚保留未編譯插值。
完成後要看到
mounted=true、insideText 更新、outsideUnchanged=true、appCount=1。
驗收證據:appCount=1、mounted=true、insideText=Vue 已接管、outsideUnchanged=true
何時會用到
在既有 HTML shell 中建立 Vue island,或以 CDN DOM template 掛載小型互動區。
常見混淆:mount 不是 appendChild;它啟動 Vue renderer 並擁有容器內的更新生命週期。
觀念與最小範例
這段程式是理解起點,不是要你直接跳過 Starter。
mount boundary 與 DOM template 限制 Application mount boundary and in-DOM template constraints
Vue 只接手貼了門牌的房間,不會重建房門外的靜態網站。
正式說法:Application.mount(container) 將根 component 渲染至該 container;in-DOM template 先受瀏覽器 HTML parser 正規化。
Vue.createApp({ data:()=>({message:'完成'}) }).mount('#app')。
三步完成本主題
每一步都留下可觀察結果;如果沒看到,先看「卡住先查」。
Step 1|先看見目前缺口,不急著貼答案。
檔案:files/starter/main.js 定位:先數 #app 是否唯一,再把 mount 前的 shell.textContent 保存。
要做:先重新載入 Starter,記錄目前畫面、DOM、Computed、Console 或文件內容。
預期:能指出「先數 #app 是否唯一,再把 mount 前的 shell.textContent 保存。」目前的缺口。
證據:保存 files/starter/main.js 的目前狀態,並指出下一步只會修改哪個檔案責任。
卡住先查:確認開啟的是 files/starter/main.js,且定位到 先數 #app 是否唯一,再把 mount 前的 shell.textContent 保存。。
Step 2|只修改本主題的一個責任。
檔案:files/starter/main.js 定位:先數 #app 是否唯一,再把 mount 前的 shell.textContent 保存。
要做:在唯一 mount container 掛載 Vue 並更新 message,確認外部 shell before/after 相同。
預期:mounted=true、insideText 更新、outsideUnchanged=true、appCount=1。
證據:appCount=1、mounted=true、insideText=Vue 已接管、outsideUnchanged=true
卡住先查:先數 #app 是否唯一,再把 mount 前的 shell.textContent 保存。
Step 3|重新載入並以證據驗收,不以『看起來差不多』判定完成。
檔案:files/starter/main.js 定位:先數 #app 是否唯一,再把 mount 前的 shell.textContent 保存。
要做:重新整理頁面,再逐項比對預期結果與 evidence。
預期:mounted=true、insideText 更新、outsideUnchanged=true、appCount=1。
證據:appCount=1、mounted=true、insideText=Vue 已接管、outsideUnchanged=true
卡住先查:先數 #app 是否唯一,再把 mount 前的 shell.textContent 保存。
觀察示範
這個示範只讓你看懂概念,不會替你修改 Starter,也不會自動宣告完成。
mount boundary 與 DOM template 限制runtime fixture · read-only demo
本主題示範畫面:
靜態 shell 保留
{{ message }}
驗收證據
勾選只是學習紀錄;真正完成仍要回到 Starter 的實際結果。
提示 1|方向
把靜態 shell 放在 mount container 外。
提示 2|關鍵片段
只 mount config.mountSelector,更新後分別讀 inside 與 outside。
提示 3|完整解答與原因
完整解答與原因:保存 shell 文字後只 mount 唯一 #app,讓 Vue 把內部插值更新成『Vue 已接管』;outside 保持不變可證明 island 邊界正確。