Vue學(xué)習(xí)之深入了解組件

上一篇:Vue學(xué)習(xí)之組件基礎(chǔ)

組件名


在注冊(cè)一個(gè)組件的時(shí)候,我們始終需要給它一個(gè)名字。該組件名就是 Vue.component的第一個(gè)參數(shù)。自定義組件名 (字母全小寫且必須包含一個(gè)連字符)。

組件名大小寫
  1. kebab-case (短橫線分隔命名) 定義一個(gè)組件時(shí),你也必須在引用這個(gè)自定義元素時(shí)使用 kebab-case。

2.使用 PascalCase (駝峰式命名) 定義一個(gè)組件時(shí),你在引用這個(gè)自定義元素時(shí)兩種命名法都可以使用。

全局注冊(cè)

Vue.component 來(lái)創(chuàng)建組件,是全局注冊(cè)的。

局部注冊(cè)

你可以通過(guò)一個(gè)普通的 JavaScript 對(duì)象來(lái)定義組件:

var ComponentA = { /* ... */ }
var ComponentB = { /* ... */ }
var ComponentC = { /* ... */ }

然后在components 選項(xiàng)中定義你想要使用的組件:

new Vue({
  el: '#app'
  components: {
    'component-a': ComponentA,
    'component-b': ComponentB
  }
})

對(duì)于 components對(duì)象中的每個(gè)屬性來(lái)說(shuō),其屬性名就是自定義元素的名字,其屬性值就是這個(gè)組件的選項(xiàng)對(duì)象。

Prop


Prop類型

每個(gè) prop 都有指定的值類型:

props: {
  title: String,
  likes: Number,
  isPublished: Boolean,
  commentIds: Array,
  author: Object
}
傳遞靜態(tài)或動(dòng)態(tài) Prop

給 prop 傳入一個(gè)靜態(tài)的值:

<blog-post title="My journey with Vue"></blog-post>

通過(guò) v-bind 動(dòng)態(tài)賦值:

<!-- 動(dòng)態(tài)賦予一個(gè)變量的值 -->
<blog-post v-bind:title="post.title"></blog-post>

<!-- 動(dòng)態(tài)賦予一個(gè)復(fù)雜表達(dá)式的值 -->
<blog-post v-bind:title="post.title + ' by ' + post.author.name"></blog-post>
傳入一個(gè)對(duì)象的所有屬性
post: {
  id: 1,
  title: 'My Journey with Vue'
}
<blog-post v-bind="post"></blog-post>
單向數(shù)據(jù)流

注意在 JavaScript 中對(duì)象和數(shù)組是通過(guò)引用傳入的,所以對(duì)于一個(gè)數(shù)組或?qū)ο箢愋偷?prop 來(lái)說(shuō),在子組件中改變這個(gè)對(duì)象或數(shù)組本身將會(huì)影響到父組件的狀態(tài)。

Prop 驗(yàn)證

注意那些 prop 會(huì)在一個(gè)組件實(shí)例創(chuàng)建之前進(jìn)行驗(yàn)證,所以實(shí)例的屬性 (如 data、computed 等) 在 default 或 validator 函數(shù)中是不可用的。

類型檢查

type 可以是下列原生構(gòu)造函數(shù)中的一個(gè):

  • String
  • Number
  • Boolean
  • Array
  • Object
  • Date
  • Function
  • Symbol

type 還可以是一個(gè)自定義的構(gòu)造函數(shù),并且通過(guò)instanceof來(lái)進(jìn)行檢查確認(rèn)。例如,給定下列現(xiàn)成的構(gòu)造函數(shù):

function Person (firstName, lastName) {
  this.firstName = firstName
  this.lastName = lastName
}

你可以使用:

Vue.component('blog-post', {
  props: {
    author: Person
  }
})

來(lái)驗(yàn)證 author prop 的值是否是通過(guò) new Person 創(chuàng)建的。

自定義事件


事件名

跟組件和 prop 不同,事件名不存在任何自動(dòng)化的大小寫轉(zhuǎn)換。而是觸發(fā)的事件名需要完全匹配監(jiān)聽(tīng)這個(gè)事件所用的名稱。

推薦你始終使用 kebab-case 的事件名。

將原生事件綁定到組件

Vue 提供了一個(gè)$listeners屬性,它是一個(gè)對(duì)象,里面包含了作用在這個(gè)組件上的所有監(jiān)聽(tīng)器。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 這篇筆記主要包含 Vue 2 不同于 Vue 1 或者特有的內(nèi)容,還有我對(duì)于 Vue 1.0 印象不深的內(nèi)容。關(guān)于...
    云之外閱讀 5,186評(píng)論 0 29
  • 此文基于官方文檔,里面部分例子有改動(dòng),加上了一些自己的理解 什么是組件? 組件(Component)是 Vue.j...
    陸志均閱讀 3,955評(píng)論 5 14
  • 1.安裝 可以簡(jiǎn)單地在頁(yè)面引入Vue.js作為獨(dú)立版本,Vue即被注冊(cè)為全局變量,可以在頁(yè)面使用了。 如果希望搭建...
    Awey閱讀 11,309評(píng)論 4 129
  • Vue 實(shí)例 屬性和方法 每個(gè) Vue 實(shí)例都會(huì)代理其 data 對(duì)象里所有的屬性:var data = { a:...
    云之外閱讀 2,388評(píng)論 0 6
  • 1:js的數(shù)字只有一種類型,他把所有的數(shù)字都成為浮點(diǎn)型數(shù)字。但是他會(huì)在內(nèi)部做優(yōu)化并且區(qū)分浮點(diǎn)數(shù)字和整數(shù),但是程序員...
    冰激凌_db91閱讀 306評(píng)論 0 0

友情鏈接更多精彩內(nèi)容