淺入深出Vue之組件使用
組件在 vue開發(fā)中是必不可少的一環(huán),用好組件這把屠龍刀,就能解決不少問題。
組件是什么
官方的定義:
- 組件是可復(fù)用的 Vue 實例,并且可帶有一個名字。
官方的定義已經(jīng)非常簡明了,組件就是一個實例。
如何使用組件
在具體編寫組件實例代碼前,我們先來如下幾個約定:
- 所有組件基于單文件組件,即一個 .vue文件就是一個組件
- data 必須為一個函數(shù)
- template 節(jié)點下只能有一個子節(jié)點
約束不多,但最后兩個需要牢記在心。
基于單文件組件的前提下,一個組件的基本構(gòu)造如下:
<template> <div> <!-- 頁面內(nèi)容 --> </div> </template> <script> export default { // 組件的邏輯,數(shù)據(jù)部分 } </script> <style> /** 樣式定義 **/ </style>
一個單文件組件由三個部分組成:
- 頁面內(nèi)容,即視圖部分,這部分是對數(shù)據(jù)的展示
- 邏輯,數(shù)據(jù)定義部分,這部分是定義、控制數(shù)據(jù)
- 樣式部分,服務(wù)于視圖
這三部分會在接下來的章節(jié)中一一實踐,在本篇中并不會給出具體的實例代碼。 本篇更側(cè)重于講清楚在寫組件之前應(yīng)該要注意的地方。
組件的命名
在這里向跑題的一點是:
- 不管是前端還是后端還是其他方向,命名一定要重視,并能給出準(zhǔn)確的、無歧義的、簡潔的命名
命名不僅僅是為了自己維護代碼,更多的是為了團隊、協(xié)作開發(fā)以及交流。良好的命名會讓你的代碼更具可讀性,而良好的可讀性會讓你的代碼更具可維護性。綜上,希望童鞋們能認(rèn)真命名,避免在項目中產(chǎn)出類似的命名:
var x = getSomething(y); var somethingA = getSomethingB(); ...
在這里,vue官方是強烈建議遵循 W3C規(guī)范去為組件命名的:
- 字母全小寫且分隔符使用連字符(短橫線):-
當(dāng)然你也可以使用Pascal命名:
- 首字母大寫,無分隔符
但是在使用組件時,都是使用的 W3C規(guī)范。假設(shè)現(xiàn)在你有一個名稱為 HelloWorld的組件,那么如何在其他組件中使用:
<hello-world></hello-world>
建議在命名時考慮以下因素:
- 詞要達(dá)意,言簡意賅,不要長篇大論
- 避免產(chǎn)生多義性
- 避免直接機翻中文,很多時候某些特有名詞或者是業(yè)務(wù)中提煉出來的詞并不適合直接機翻(機器翻譯)。對同一機翻詞匯,一百個人心中可能有一百種不同的解釋
- 參考優(yōu)秀開源項目的命名規(guī)范
- 參考語言/框架所推薦的規(guī)范
- 同一項目中,對于同一個業(yè)務(wù)知識、名詞的翻譯盡可能保持一致(同樣也是為了避免多義性)
在同一個項目中,盡可能保持統(tǒng)一風(fēng)格
組件的注冊
在另一個組件中如果需要使用其它自定義組件,那首先是需要將組件注冊。
而注冊分為:
- 局部注冊
- 全局注冊
局部注冊
局部注冊的用法:
<template> <div> <!-- 第三步: 在頁面中使用 --> <hello-world></hello-world> </div> </template> <script> // 第一步:引入組件 import HelloWorld from 'your/component/path' export default { // 第二步:在當(dāng)前組件注冊此組件,注冊之后才可以在頁面中使用 components: [ HelloWorld ] } </script>
上圖我們可以看到,在單文件組件中局部注冊的使用步驟:
- 將組件引入
- 在當(dāng)前組件中注冊,這一步也就體現(xiàn)了局部二字,因為注冊后的作用域僅在當(dāng)前組件內(nèi)。
- 在視圖中使用
全局注冊
如果這個 HelloWorld組件是經(jīng)常要用的一個 UI組件怎么辦,如果使用局部注冊那意味著每個組件中都將存在第一步和第二步的重復(fù)代碼。
看見重復(fù)代碼,我們應(yīng)該形成一種想要干掉它的本能。因為重復(fù)代碼屬于項目中的壞味道,會讓項目的整體質(zhì)量下降,并且直接影響項目的可維護性和可擴展性。
想想,當(dāng)這個項目非常龐大,龐大到這個基礎(chǔ)組件已經(jīng)被成百上千個組件引用了,哪天你要改這個組件的文件名或者移動路徑時,將是一場災(zāi)難。
因此,在 vue中提供了全局注冊的辦法。只需注冊一次,剩余組件中第一步和第二步的代碼就可以直接刪掉,因為全局注冊之后可以直接在視圖中使用。
// main.js 入口文件,在創(chuàng)建根實例之前將其注冊 import HelloWorld from 'your/component/path' Vue.component('HelloWorld', HelloWorld) new Vue({ ... })
但是這種手動全局注冊單個組件也存在一個問題:
- 不夠自動化,當(dāng)組件數(shù)量繁多時,手動注冊組件就又成了一個負(fù)擔(dān)
這里童鞋們可以思考思考如何在 vue中實現(xiàn)自動全局注冊組件。
寫在后面
組件系統(tǒng)所包含的內(nèi)容是相當(dāng)豐富的,三言兩語很難說完整,因此這里只提組件最基礎(chǔ)的使用和注冊以及在實踐中會遇到的問題。
下一篇將會詳細(xì)的說明子組件及在其上進行數(shù)據(jù)傳遞的相關(guān)知識,同樣,也是以理論為主。也是作為基礎(chǔ)篇的最后一篇~
好了,以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,謝謝大家對腳本之家的支持。
- vue如何引用其他組件(css和js)
- Vuejs第九篇之組件作用域及props數(shù)據(jù)傳遞實例詳解
- 詳解vue2父組件傳遞props異步數(shù)據(jù)到子組件的問題
- vue-dialog的彈出層組件
- Vue2實現(xiàn)組件props雙向綁定
- vue之父子組件間通信實例講解(props、$ref、$emit)
- 詳解vue2.0 使用動態(tài)組件實現(xiàn) Tab 標(biāo)簽頁切換效果(vue-cli)
- Vue-Router實現(xiàn)組件間跳轉(zhuǎn)的三種方法
- vue mounted組件的使用
- vue組件 $children,$refs,$parent的使用詳解
相關(guān)文章
vue2.0 實現(xiàn)導(dǎo)航守衛(wèi)的具體用法(路由守衛(wèi))
這篇文章主要介紹了vue2.0 實現(xiàn)導(dǎo)航守衛(wèi)的具體用法(路由守衛(wèi)),vue-route 提供的 beforeRouteUpdate 可以方便地實現(xiàn)導(dǎo)航守衛(wèi)(navigation-guards),具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-05-05el-select選擇器組件下拉框增加自定義按鈕的實現(xiàn)
本文主要介紹了el-select選擇器組件下拉框增加自定義按鈕的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2024-07-07vue之父子組件間通信實例講解(props、$ref、$emit)
組件間如何通信,也就成為了vue中重點知識了。這篇文章將會通過props、$ref和 $emit 這幾個知識點,來講解如何實現(xiàn)父子組件間通信。2018-05-05