【Vue2手錄12】單文件組件SFC

一、知識回顧-Vue2項目基礎操作與環境配置

1.1 項目啟動

  • 項目打開方式:直接將項目文件夾(如my-app)拖拽到 Visual Studio Code(推薦編輯器),避免拖拽父級文件夾,防止路徑混亂。
  • 啟動命令
    1. 進入項目根目錄(必須與package.json同級),打開終端執行啟動命令。
    2. 默認命令:npm run serve(命令定義在package.jsonscripts字段中)。
    3. 命令變體:部分項目可能使用npm run devnpm run start,需以實際項目package.json中的配置為準(例:若scripts: {"dev": "vue-cli-service serve"},則執行npm run dev)。

  • 服務管理
    • 關閉服務:終端中按Ctrl+C(Mac 為Command+C),輸入y確認。
    • 重啟服務:需先關閉現有服務,再重新執行啟動命令,不可直接開新終端啟動(避免端口占用)。
    • 終端切換:VS Code 可通過右側標簽頁切換多個終端實例。

1.2 淘寶鏡像配置

  • 作用:解決從國外 npm 倉庫下載依賴速度慢的問題(國內服務器定期同步國外倉庫代碼,形成鏡像副本)。
  • 切換邏輯
    • 自動切換:當系統檢測到下載速度過慢時,會提示是否切換至淘寶鏡像。
    • 適用場景:僅在下載速度慢時配置,正常網絡環境可無需設置(鏡像內容與原倉庫完全一致,不影響功能)。
  • 主動配置步驟
    1. 打開終端,執行配置命令:npm config set registry https://registry.npm.taobao.org
    2. 驗證配置:執行npm config get registry,若返回淘寶鏡像地址則配置成功。
    3. 注意事項:配置后下載地址會永久變更,如需恢復默認倉庫,執行npm config set registry https://registry.npmjs.org

1.3 項目訪問與常見問題

  • 訪問方式:啟動成功后,終端會輸出本地地址(如http://localhost:8080/),在瀏覽器中輸入該地址即可訪問項目。
  • 禁止直接訪問 HTML:項目運行在集成服務器環境,直接雙擊public/index.html無法正常加載(依賴 Webpack 打包的模塊化資源)。
  • 常見啟動錯誤排查
    • 錯誤場景 1:在父目錄或子目錄(如src)執行啟動命令 → 解決方案:切換到package.json所在的根目錄。
    • 錯誤場景 2:命令不存在(如npm run dev報錯)→ 解決方案:查看package.jsonscripts字段,確認正確命令。
    • 錯誤場景 3:端口占用 → 解決方案:終端按Ctrl+C關閉占用端口的服務,或重啟終端。

二、項目文件結構與 SPA 概念

2.1 核心目錄解析

目錄/文件作用與說明注意事項
node_modules存放通過npm install下載的所有依賴包(如 Vue、Vue Router)通常無需修改內部代碼,若需修改源碼需謹慎(升級依賴可能覆蓋修改)
public靜態文件目錄,存放項目唯一的 HTML 文件(單頁應用核心)包含index.html(掛載點)和favicon.ico(瀏覽器標簽圖標)
src核心開發目錄,所有業務代碼在此編寫開發的核心區域,需熟練掌握子目錄功能
src/assets存放靜態資源(圖片、字體文件等)建議按類型分類(如assets/imagesassets/fonts
src/components存放公共復用組件(如導航欄、按鈕、彈窗等)組件文件建議用 PascalCase 命名(如Navbar.vue
src/store與 Vuex 相關的狀態管理目錄(用于多組件數據共享,后續章節講解)初期可忽略,需使用 Vuex 時再配置
src/App.vue項目根組件,所有頁面組件最終嵌套在該組件中單文件組件的典型示例,包含templatescriptstyle三部分
src/main.js項目入口文件,建立所有 JS 文件的依賴關系鏈所有自定義 JS 必須直接/間接被該文件引入,否則無法生效

2.2 SPA 與 MPA 對比(單頁應用 vs 多頁應用)

對比維度單頁應用(SPA)多頁應用(MPA)
核心特點只有 1 個 HTML 文件,頁面切換不刷新整體多個獨立 HTML 文件,跳轉時加載新頁面
切換方式通過前端路由(如 Vue Router)動態替換內容通過超鏈接(<a>標簽)跳轉新頁面
用戶體驗流暢(類似桌面/移動端 App)跳轉時有加載延遲,體驗較割裂
開發復雜度需處理路由、狀態管理,復雜度較高無需路由,僅需處理頁面間數據傳遞(如 URL 參數)
SEO 優化較差(內容動態渲染,搜索引擎難抓取)較好(每個頁面獨立 HTML,易被抓取)
適用場景后臺管理系統、移動端 App、數據看板新聞網站、電商平臺(如京東)、博客

三、核心文件深度解析

3.1 入口文件 main.js

main.js是項目的“入口大門”,所有 JS 依賴最終通過它關聯,其核心作用是創建 Vue 實例并掛載到頁面。

核心代碼解析(Vue 2 示例)
// 1. 導入 Vue 核心包(從 node_modules 中查找)
import Vue from 'vue'
// 2. 導入根組件 App.vue(相對路徑,需加 ./)
import App from './App.vue'
// 3. 導入路由實例(后續路由章節配置,可選)
// import router from './router'// 4. 關閉生產環境的錯誤提示(上線時隱藏控制臺報錯,避免暴露代碼問題)
Vue.config.productionTip = false// 5. 創建 Vue 實例
new Vue({// router, // 路由實例(可選,需配置路由時添加)render: h => h(App) // 渲染根組件 App(h 是 createElement 的簡寫,用于創建虛擬 DOM)
}).$mount('#app') // 掛載到 index.html 中 id 為 app 的元素(等效于配置 el: '#app')
關鍵知識點
  • 依賴鏈規則:若自定義 JS 文件(如src/a.js)未被main.js直接/間接引入(例:main.js引入c.jsc.js引入a.js),則該文件功能不會生效(Webpack 打包時會忽略未引入的文件)。
  • render函數作用:Vue 根組件需通過render函數渲染子組件(非根組件可通過components注冊后直接使用),h(App)表示將App組件轉換為虛擬 DOM 并渲染。
  • 掛載方式對比
    • 傳統方式:new Vue({ el: '#app' })(直接指定掛載點)。
    • 推薦方式:$mount('#app')(更靈活,可動態控制掛載時機)。

3.2 靜態文件 public/index.html

該文件是項目唯一的 HTML 載體,所有 Vue 組件最終都會渲染到這個文件中。

核心代碼解析
<!DOCTYPE html>
<html lang=""><head><meta charset="utf-8"><!-- 適配移動端 --><meta name="viewport" content="width=device-width,initial-scale=1.0"><!-- 頁面標題(由 Webpack 動態注入,配置在 package.json 中) --><title><%= htmlWebpackPlugin.options.title %></title></head><body><!-- 1. Vue 應用的掛載點:所有組件內容最終渲染到這里 --><div id="app"></div><!-- 2. 兼容性提示:瀏覽器禁用 JS 時顯示 --><noscript><strong>We're sorry but <%= htmlWebpackPlugin.options.title %> doesn't work properly without JavaScript enabled. Please enable it to continue.</strong></noscript><!-- 3. JS 自動注入:Webpack 打包時會將編譯后的 JS 文件(如 main.js)自動插入這里,無需手動加 <script> 標簽 --></body>
</html>
關鍵知識點
  • 自動注入機制:HTML 中未顯式引入main.js,但 Webpack 會在打包時將所有依賴的 JS 合并并注入到<body>末尾,確保 DOM 加載完成后執行 JS。
  • 掛載點作用id="app"div是 Vue 實例的“容器”,Vue 會將虛擬 DOM 渲染為真實 DOM 并替換該容器內的內容。

四、單文件組件(.vue)詳解

單文件組件(SFC)是 Vue 的核心特性,將組件的模板(HTML)、邏輯(JS)、樣式(CSS) 封裝在一個.vue文件中,結構清晰且便于維護。

4.1 基本結構與要求

一個完整的單文件組件必須包含templatescriptstyle可選(若無需樣式可省略)。

標準結構示例(Demo.vue
<template><!-- 模板:必須有且只有一個根元素(通常用 div 包裹) --><div class="demo-container"><h1>{{ title }}</h1><p>{{ content }}</p></div>
</template>
<script>
// 邏輯:通過 export default 導出組件配置對象
export default {// 組件名稱(建議與文件名一致,PascalCase 命名,非必需但便于調試)name: 'Demo',// 數據定義:必須是函數(避免組件復用時數據污染),返回對象data() {return {title: '單文件組件示例',content: '這是組件的動態內容'}},// 生命周期鉤子(可選,如組件創建后執行)created() {console.log('Demo 組件已創建')}
}
</script>
<style scoped>
/* 樣式:scoped 表示樣式僅作用于當前組件(避免全局污染) */
.demo-container {width: 80%;margin: 0 auto;padding: 20px;border: 1px solid #eee;
}
h1 {color: #42b983; /* Vue 主題色 */
}
</style>
核心要求
  1. template規則
    • 必須包含一個根元素(若有多個同級元素,需用divtemplate等標簽包裹),否則會觸發 ESLint 錯誤。
    • 支持 Vue 指令(如v-forv-ifv-bind)和插值語法({{ 變量 }})。
  2. script規則
    • 必須通過export default導出組件配置對象(否則無法被其他組件引入)。
    • data必須是函數(返回對象),而非直接定義對象(原因:組件復用后,每個實例會擁有獨立的數據副本,避免數據共享污染)。
  3. style規則
    • 若需樣式隔離,添加scoped屬性(原理:Webpack 會給組件內所有 DOM 元素添加唯一data-v-xxx屬性,樣式選擇器會自動匹配該屬性,如.demo-container[data-v-123])。
    • 支持預處理器(如 SCSS):需安裝對應依賴(如node-sasssass-loader),并在style標簽中指定語言(例:<style lang="scss" scoped>)。

4.2 組件引入與注冊

組件需先引入、再注冊,最后才能在模板中使用,流程如下(以App.vue引入Demo.vue為例):

步驟 1:引入組件

在父組件(如App.vue)的script中,通過import語法引入子組件:

// App.vue 的 script 部分
import Demo from './components/Demo.vue' // 相對路徑:從當前目錄下的 components 文件夾引入 Demo.vue
步驟 2:注冊組件

export defaultcomponents選項中注冊引入的組件:

export default {name: 'App',components: {Demo // 等價于 Demo: Demo(ES6 簡寫,鍵和值同名時可省略值)}
}
步驟 3:使用組件

在父組件的template中,使用組件標簽(支持兩種寫法):

<template><div id="app"><!-- 寫法 1:kebab-case(推薦,符合 HTML 標簽命名規范) --><demo></demo><!-- 寫法 2:PascalCase(與組件名一致,Vue 支持但不推薦在 HTML 中使用) --><!-- <Demo></Demo> --></div>
</template>
命名規范
  • 組件文件名:PascalCase(如UserProfile.vue),便于區分組件和普通文件。
  • 組件標簽:在模板中使用kebab-case(如<user-profile>),符合 HTML 標簽的小寫命名習慣。
  • 避免使用保留字(如divbutton)作為組件名,防止與原生標簽沖突。

4.3 樣式作用域與深度選擇器

1. scoped的局限性
  • 當組件中使用scoped后,樣式僅作用于當前組件的 DOM,無法修改子組件的樣式(子組件的 DOM 沒有當前組件的data-v-xxx屬性)。
  • 例:若App.vue中用了scoped,無法直接修改Demo.vue.demo-container的樣式。
2. 深度選擇器(解決子組件樣式修改)

若需修改子組件樣式,可使用深度選擇器(不同預處理器語法不同):

  • 原生 CSS:使用>>>(例:>>> .demo-container { color: red; })。
  • SCSS/LESS:使用/deep/(例:/deep/ .demo-container { color: red; })。
  • Vue 3 中:使用:deep()(例::deep(.demo-container) { color: red; })。
示例(App.vue修改Demo.vue樣式)
<!-- App.vue 的 style 部分 -->
<style scoped>
/* 使用深度選擇器修改 Demo 組件的 .demo-container 樣式 */
>>> .demo-container {border-color: red;
}
</style>

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/96924.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/96924.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/96924.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

VS2022下載+海康SDK環境配置實現實時預覽

一.VS2022下載去官網下載就可以了&#xff1a;https://visualstudio.microsoft.com/zh-hans/vs/下載Community版本是免費的。&#xff08;2&#xff09;下載后得安裝包VisualStudioSetup.exe打開&#xff1a;點擊繼續等待下載完成&#xff0c;出現如下界面&#xff0c;這里是選…

YOLO 模型從 PyTorch 轉換為 ONNX 并優化

YOLO 模型從 PyTorch 轉換為 ONNX 并優化 在深度學習部署中&#xff0c;ONNX&#xff08;Open Neural Network Exchange&#xff09; 已成為跨框架與跨平臺的標準格式。我們經常需要將 YOLOv8 在 PyTorch 中訓練好的模型轉換為 ONNX&#xff0c;并進行優化&#xff0c;以便在 …

推進新型信息基礎設施建設發展:蜂窩模組行業迎來結構性機遇

工信部副部長張云明在2025年9月9日國新辦新聞發布會上明確表示&#xff0c;將"扎實推進新型信息基礎設施建設發展"&#xff0c;并重點強調"打造新型工業網絡&#xff0c;推進蜂窩車聯網部署" 。這一政策表態對蜂窩模組行業產生深遠影響&#xff0c;將推動行…

返利app排行榜的緩存更新策略:基于過期時間與主動更新的混合方案

返利app排行榜的緩存更新策略&#xff1a;基于過期時間與主動更新的混合方案 大家好&#xff0c;我是阿可&#xff0c;微賺淘客系統及省賺客APP創始人&#xff0c;是個冬天不穿秋褲&#xff0c;天冷也要風度的程序猿&#xff01; 在返利APP中&#xff0c;“熱門商品排行榜”“用…

科技信息差(9.12)

AI量子計算重塑藥物研發&#xff1a;技術融合路徑與產業革命一、引言&#xff1a;技術融合的顛覆性機遇2025年9月&#xff0c;AI藥物研發公共服務平臺正式上線&#xff0c;宣稱可將新藥上市時間縮短近半1。與此同時&#xff0c;量子計算與AI的跨界合作在KRAS抑制劑開發中取得突…

Java 分布式緩存實現:結合 RMI 與本地文件緩存

目錄 一、核心思路 二、項目結構說明 2.1 服務端項目結構&#xff08;IDEA&#xff09; 2.2 客戶端項目結構&#xff08;Eclipse&#xff09; 三、服務端實現&#xff08;IDEA&#xff09; 3.1 數據庫訪問層 3.2 遠程接口定義 3.3 遠程服務實現 3.4 服務端啟動類 四、…

Electron第一個應用

1、安裝node nodeJS下載 2、下載完成&#xff0c;需要配置環境。 寫道path路徑 、 3、安裝完成&#xff0c;查看版本 npm -v4、 配置cnpm npm install -g cnpm --registryhttps://registry.npmmirror.com5、參考Electron 寫&#xff1a; Electron第一個程序hello 6、安裝…

React 原理篇 - React 新架構深度解析

使用過 React v16 之前版本的開發者或許都經歷過這樣的場景&#xff1a;當頁面包含復雜組件或大量列表時&#xff0c;輸入框打字會卡頓&#xff0c;滾動會不流暢。這些體驗問題的背后&#xff0c;往往與 React 的渲染機制密切相關。2017 年 React v16 推出的 Fiber 架構&#x…

【JavaSE五天速通|第三篇】常用API與日期類篇

適合有其他語言基礎想快速入門JavaSE的。用的資料是 Java入門基礎視頻教程 &#xff0c;從中摘取了筆者認為與其他語言不同或需要重點學習的內容 常用API與日期類只需要有印象即可&#xff0c;用到了再來這查 day04 常用API 一、StringBuilder類 StringBuilder代表可變字符…

K8s學習筆記(二) Pod入門與實戰

1 K8s核心資源Pod 1.1 Pod是什么&#xff1f; 官方文檔&#xff1a;Pod | Kubernetes Pod 是 Kubernetes&#xff08;k8s&#xff09;中最小的部署與調度單元&#xff0c;并非直接運行容器&#xff0c;而是對一個或多個 “緊密關聯” 容器的封裝。 核心特點可簡單總結為 3 …

用 Python 調用 Bright Data MCP Server:在 VS Code 中實現實時網頁數據抓取

用 Python 調用 Bright Data MCP Server&#xff1a;在 VS Code 中實現實時網頁數據抓取&#xff0c;本文介紹了Bright Data的Web MCP Server&#xff0c;這是一款能實現實時、結構化網頁數據訪問的API&#xff0c;適用于AI應用等場景。其支持靜態與動態網頁&#xff0c;前3個月…

SPSS繪制ROC曲線并計算靈敏度、特異度

SPSS繪制ROC曲線并計算靈敏度、特異度。 &#xff08;1&#xff09;繪制ROC曲線&#xff1a; 輸入&#xff1a;預測值、受試者標簽。 在SPSS中點擊“分析”-“分類”-“ROC曲線” 變量輸入&#xff1a;檢驗變量輸入預測值&#xff0c;狀態變量輸入受試者標簽&#xff0c;如果標…

Modbus協議原理與Go語言實現詳解

目錄 Modbus協議概述協議架構與通信模式Modbus數據模型Modbus協議幀格式功能碼詳解Go Modbus庫完整實現高級應用示例調試與故障排除 Modbus協議概述 Modbus是一種串行通信協議&#xff0c;由Modicon公司&#xff08;現施耐德電氣&#xff09;于1979年開發&#xff0c;用于PL…

下載CentOS 7——從阿里云上下載不同版本的 CentOS 7

沒有廢話&#xff0c;直接上干貨。跟著圖片教程&#xff0c;一步一步來就行。 想下載其它版本的&#xff0c;自己可以再選擇其它的就行。 想省事的朋友可以直接點擊: 1、下載頁面鏈接 2、CentOS-7-x86_64-DVD-2207-02(4.4GB).iso

SpringBoot -原理篇

文章目錄配置優先級Bean管理獲取beanbean作用域第三方beanSpringBoot原理起步依賴自動配置自動配置原理方案源碼跟蹤原理分析 Conditional案例&#xff08;自定義starter&#xff09;案例&#xff08;自定義starter分析&#xff09;案例&#xff08;自定義starter實現&#xff…

JavaScript與jQuery:從入門到面試的完整指南

JavaScript與jQuery&#xff1a;從入門到面試的完整指南 第一部分&#xff1a;JavaScript基礎 1.1 JavaScript簡介 JavaScript是一種輕量級的解釋型編程語言&#xff0c;主要用于Web開發&#xff0c;可以為網頁添加交互功能。它是ECMAScript規范的一種實現。 // 第一個JavaScri…

解決:Ubuntu、Kylin、Rocky系統中root用戶忘記密碼

解決Linux系統中root用戶忘記密碼 Ubuntu2204 重啟電腦&#xff0c;啟動時&#xff0c;長按Shift鍵&#xff08;對于 BIOS 系統&#xff09;或 Esc 鍵&#xff08;對于 UEFI 系統&#xff09;進入GRUB菜單 步驟1&#xff1a;重啟Ubuntu系統&#xff0c;長按Shift鍵進入Ubuntu…

ENVI系列教程(二)——自定義坐標系(北京 54、西安 80、2000 坐標系)

目錄 1 概述 1.1 地理投影的基本原理 1.2 國內坐標系介紹 1.3 參數的獲取 2 詳細操作步驟 2.1 添加橢球體 2.2 添加基準面 2.3 定義坐標系 2.4 使用自定義坐標系 1 概述 1.1 地理投影的基本原理 常用到的地圖坐標系有 2 種,即地理坐標系和投影坐標系。地理坐標系是…

一種基于因果干預的少樣本學習的故障診斷模型

一、研究背景與問題 ?工業背景?:機械故障診斷對工業系統安全至關重要,但實際中故障樣本稀少,難以訓練傳統深度學習模型。 ?現有問題?: 當前少樣本學習(FSL)方法大多基于相關性而非因果關系建模,容易學習到偽相關特征,導致模型可解釋性差、泛化能力弱。 跨組件故障診…

機器視覺光源的尺寸該如何選型的方法

機器視覺光源的尺寸該如何選型的方法&#x1f3af;機器視覺光源的尺寸選型的方法&#x1f3af;一、選型案例&#x1f3af;二、照射方式&#x1f3af;三、鏡頭選擇&#x1f3af;四、光源架構光源的工作距離與視野大小&#x1f3af;五、總結&#xff1a;光源選型 —— 機器視覺檢…