Vue組件之非單文件組件用法及說(shuō)明
組件化是Vue.js最強(qiáng)大的特性之一,它允許我們將UI拆分為獨(dú)立可復(fù)用的代碼片段。
本文及后續(xù)幾篇文章將全面解析Vue組件的各種概念和使用方法,通過(guò)豐富的實(shí)例演示組件開(kāi)發(fā)的全過(guò)程,并提供最佳實(shí)踐建議。
一、組件基礎(chǔ)概念
1. 什么是組件?
組件是實(shí)現(xiàn)應(yīng)用局部功能的代碼和資源的集合,具有以下特點(diǎn):
- 可復(fù)用:可以在多個(gè)地方重復(fù)使用
- 可組合:可以嵌套其他組件
- 獨(dú)立:擁有自己的數(shù)據(jù)、模板和邏輯
2. 組件化 vs 模塊化
| 特性 | 組件化 | 模塊化 |
|---|---|---|
| 關(guān)注點(diǎn) | UI功能單元 | JS功能單元 |
| 組成 | 包含HTML/CSS/JS | 純JS代碼 |
| 復(fù)用級(jí)別 | 視圖級(jí)別復(fù)用 | 邏輯級(jí)別復(fù)用 |
| 典型使用場(chǎng)景 | 構(gòu)建用戶界面 | 組織業(yè)務(wù)邏輯 |
二、非單文件組件
1. 基本使用步驟
1.1 創(chuàng)建組件
// 使用Vue.extend創(chuàng)建組件
const Company = Vue.extend({
template: `
<div>
<h2>公司名稱:{{name}}</h2>
<h2>公司地址:{{address}}</h2>
</div>
`,
data() {
return {
name: "Vue Company",
address: "北京"
}
}
})注意事項(xiàng):
- 不要指定
el選項(xiàng) data必須使用函數(shù)形式返回對(duì)象template定義組件結(jié)構(gòu)
1.2 注冊(cè)組件
// 全局注冊(cè)
Vue.component('company', Company)
// 局部注冊(cè)
new Vue({
el: '#app',
components: {
'company': Company
}
})注意:組件名與定義的組件同名時(shí)可簡(jiǎn)寫(xiě)成components:{company},
'company'也可不帶引號(hào)
1.3 使用組件
<div id="app"> <company></company> </div>
2. 組件命名規(guī)范
| 命名方式 | 示例 | 適用場(chǎng)景 |
|---|---|---|
| kebab-case | my-company | 所有場(chǎng)景,推薦HTML中使用 |
| CamelCase | MyCompany | 需要Vue腳手架支持,推薦JS中使用 |
注意事項(xiàng):
- 避免與HTML原生標(biāo)簽沖突
- 多單詞名稱必須使用短橫線或駝峰命名
- 可以使用
name選項(xiàng)指定開(kāi)發(fā)者工具中顯示的名稱
3. 組件標(biāo)簽寫(xiě)法
<!-- 完整寫(xiě)法 --> <company></company> <!-- 自閉合寫(xiě)法(需要腳手架支持) --> <company/>
三、組件嵌套與組織
1. 組件嵌套示例
// 定義員工組件
const Employee = Vue.extend({
template: `
<div>
<h3>員工姓名:{{name}}</h3>
<h3>員工工號(hào):{{id}}</h3>
</div>
`,
data() {
return {
name: "張三",
id: "1001"
}
}
})
// 定義公司組件(嵌套員工組件)
const Company = Vue.extend({
template: `
<div>
<h2>公司名稱:{{name}}</h2>
<employee></employee>
</div>
`,
components: {
'employee': Employee
},
data() {
return {
name: "Vue Company"
}
}
})
// 定義App根組件
const App = Vue.extend({
template: `
<div>
<company></company>
</div>
`,
components: {
'company': Company
}
})
// 創(chuàng)建Vue實(shí)例
new Vue({
el: '#app',
template: '<App/>',
components: { App }
})2. 組件樹(shù)結(jié)構(gòu)
Vue實(shí)例 (vm)
└── App (vc)
└── Company (vc)
└── Employee (vc)四、組件核心原理
1. VueComponent構(gòu)造函數(shù)
- 組件本質(zhì)是
VueComponent構(gòu)造函數(shù) - 由
Vue.extend自動(dòng)生成 - 每次調(diào)用
Vue.extend都會(huì)返回全新的VueComponent
2. this指向問(wèn)題
| 上下文 | this指向 |
|---|---|
| Vue實(shí)例配置 | Vue實(shí)例對(duì)象 (vm) |
| 組件配置 | VueComponent實(shí)例 (vc) |
3. vm與vc的重要區(qū)別
| 特性 | Vue實(shí)例 (vm) | VueComponent實(shí)例 (vc) |
|---|---|---|
| el選項(xiàng) | 支持 | 不支持 |
| data形式 | 對(duì)象或函數(shù) | 必須為函數(shù) |
| 使用場(chǎng)景 | 根實(shí)例 | 可復(fù)用組件 |
| 生命周期 | 完整生命周期 | 無(wú)beforeCreate和created |
五、最佳實(shí)踐與建議
1. 組件設(shè)計(jì)原則
- 單一職責(zé)原則:每個(gè)組件只做一件事
- 松耦合:盡量減少組件間的依賴
- 高內(nèi)聚:相關(guān)功能盡量放在同一個(gè)組件
- 可復(fù)用性:設(shè)計(jì)可配置的通用組件
2. 組件組織建議
- 合理劃分組件層次結(jié)構(gòu)
- 避免過(guò)深的嵌套(一般不超過(guò)3層)
- 公共組件放在全局注冊(cè)
- 業(yè)務(wù)組件按功能模塊組織
3. 性能優(yōu)化
- 合理使用
v-if和v-show控制組件渲染 - 使用
keep-alive緩存不活躍的組件 - 大型組件考慮拆分為更小的子組件
六、從非單文件組件到單文件組件
非單文件組件適合簡(jiǎn)單場(chǎng)景,但在實(shí)際項(xiàng)目中,我們更推薦使用單文件組件(SFC):
<!-- Company.vue -->
<template>
<div>
<h2>公司名稱:{{name}}</h2>
<employee></employee>
</div>
</template>
<script>
import Employee from './Employee.vue'
export default {
name: 'Company',
components: {
Employee
},
data() {
return {
name: "Vue Company"
}
}
}
</script>
<style scoped>
h2 {
color: #42b983;
}
</style>單文件組件優(yōu)勢(shì):
- 更好的代碼組織
- 支持預(yù)處理器
- 作用域CSS
- 更好的IDE支持
七、總結(jié)
Vue組件是構(gòu)建現(xiàn)代Web應(yīng)用的基石。通過(guò)本文我們了解了:
- 組件的基本概念和創(chuàng)建方式
- 組件的命名規(guī)范和使用方法
- 組件的嵌套和組織結(jié)構(gòu)
- 組件的核心原理和實(shí)現(xiàn)機(jī)制
- 組件開(kāi)發(fā)的最佳實(shí)踐
掌握組件化開(kāi)發(fā)能夠顯著提高代碼的可維護(hù)性和復(fù)用性。在實(shí)際項(xiàng)目中,建議結(jié)合Vue CLI使用單文件組件,這將帶來(lái)更好的開(kāi)發(fā)體驗(yàn)和更高的工程化水平。
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
關(guān)于vue的npm run dev和npm run build的區(qū)別介紹
這篇文章主要介紹了關(guān)于vue的npm run dev和npm run build的區(qū)別介紹,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2019-01-01
解決Vue-Router升級(jí)導(dǎo)致的Uncaught (in promise)問(wèn)題
這篇文章主要介紹了解決Vue-Router升級(jí)導(dǎo)致的Uncaught (in promise)問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-08-08
詳解 vue better-scroll滾動(dòng)插件排坑
本篇文章主要介紹了詳解 vue better-scroll滾動(dòng)插件排坑,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-02-02
Vue網(wǎng)絡(luò)請(qǐng)求的三種實(shí)現(xiàn)方式介紹
這篇文章主要介紹了Vue網(wǎng)絡(luò)請(qǐng)求的三種實(shí)現(xiàn)方式,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-09-09
如何通過(guò)URL來(lái)實(shí)現(xiàn)在Vue中存儲(chǔ)業(yè)務(wù)狀態(tài)實(shí)用技巧
這篇文章主要為大家介紹了如何通過(guò)URL來(lái)實(shí)現(xiàn)在Vue中存儲(chǔ)業(yè)務(wù)狀態(tài)實(shí)用技巧,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-10-10
vue路由切換之淡入淡出的簡(jiǎn)單實(shí)現(xiàn)
今天小編就為大家分享一篇vue路由切換之淡入淡出的簡(jiǎn)單實(shí)現(xiàn),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-10-10

