在正式開始講解元件之前,我們先來看乙個簡單的例子:
下面我們詳細解讀一下上面這份**:
vue.component('button-counter',
},template: '} times'
})
我們首先通過全域性方法vue.component()
建立了乙個名為 button-counter 的全域性元件
該方法的第乙個引數是元件名,第二個引數是選項物件,物件中包含兩個屬性,data
和template
屬性data
是乙個返回物件的函式,用於儲存動態變化的資料
之所以定義為函式,是因為元件可能被用來建立多個例項,若定義為物件,則所有例項將會共享同乙份資料物件
屬性template
是乙個模板字串,用於定義元件的 html **
需要注意的是,元件必須是單根元素,也就是說模板的內容必須包裹在乙個父元素內
然後,我們就可以在乙個通過new vue()
建立的根例項中,把這個元件當作自定義元素使用
好,在對元件有了乙個初步的理解之後,下面我們再來進行詳細的學習
元件是可復用的 vue 例項,在使用元件前,我們首先要對元件進行註冊,以便於 vue 能夠識別出來
(1)元件註冊的引數有兩個,分別是元件名和選項物件
定義元件名的方式有兩種,分別是 kebab-case(短橫線分隔命名)和 pascalcase(首字母大寫命名)
kebab-case
:在引用時,需要使用 kebab-case
pascalcase
:在模板中使用時,兩種命名法都可用;在 dom 中使用時,只有 kebab-case 是有效的
該物件接收的選項與new vue()
接收的選項類似,僅有的例外是像el
這樣的根例項特有的選項
(2)元件註冊的方式有兩種,分別是全域性註冊和區域性註冊
我們可以使用全域性方法vue.component()
進行全域性註冊,該方法的第乙個引數是元件名,第二個引數是選項物件
全域性註冊的元件可以在任何新建立的根例項中使用
vue.component('component-a', )
vue.component('component-b', )
我們可以在建立根例項時使用選項components
進行區域性註冊,它是乙個物件,鍵是元件名,值是選項物件
區域性註冊的元件不可以在其子元件中使用,也就是說,在下例中的兩個元件不可以在各自內部相互呼叫
var componenta =
var componentb =
new vue(
})
如果希望componenta
在componentb
中可用,我們需要換一種寫法:
var componenta =
var componentb = ,
// ...
}
prop 是在元件註冊的一些自定義特性,當乙個值傳遞給乙個 prop 特性時,它就變成那個元件例項的乙個屬性
(1)傳遞靜態 prop
在下例中,我們給 prop 傳遞了乙個靜態的值,title here
(2)傳遞動態 prop
在下例中,我們通過v-bind
給 prop 繫結了乙個動態的物件,content
(3)prop 型別與 prop 驗證
在上面的兩個例子中,props 都是乙個字串陣列,其中的每乙個 prop 都是乙個字串
但事實上,prop 還可以是其它型別
這時我們可以用物件列出 prop,其中物件的鍵是 prop 的名稱,物件的值是 prop 的型別
vue.component('my-component', ,
// ...
})
既然 prop 有了型別,就要判斷 prop 是否符合型別,我們可以定製 prop 的驗證方式(以下是官方文件中的乙個例子)
vue.component('my-component', ,
// 帶有預設值的數字
propd: ,
// 帶有預設值的物件
prope: }},
// 自定義驗證函式
propf:
}}})
當 prop 驗證失敗時,(開發環境構建版本的) vue 將會產生乙個控制台的警告
prop 是乙個單向下行繫結,即父級 prop 的更新會向下流動到子元件中,但反過來不行
如果子元件要把資料傳遞給父元件,則需要使用自定義事件
父元件可以通過v-on
監聽子元件例項的任意事件,而子元件可以通過$emit()
觸發事件
(1)監聽子元件事件
下面讓我們來詳細解讀一下上面這段**:
vue.component('button-counter', }',
data: function ()
},methods:
},})
首先,我們定義了乙個名為 button-counter 的元件
子元件 button-counter 使用v-on
監聽原生事件 click,該事件的處理函式是incrementhandler()
在incrementhandler()
中,首先將 counter(子元件中的資料)的值加 1,然後觸發自定義事件 increment
new vue(,
methods:
}})
根元件同樣是通過v-on
監聽自定義事件 increment,該事件的處理函式是incrementtotal()
在incrementtotal()
中,將 total(根元件中的資料)的值加 1
(2)通過事件丟擲乙個值
我們可以在$emit()
函式的第二個引數中丟擲乙個值
vue.component('button-counter', }',
data: function ()
},methods:
},})
並在事件處理函式的第乙個引數中接收該值
new vue(,
methods:
}})
【 閱讀更多 vue 系列文章,請看 vue學習筆記 】 vue學習筆記3 元件
1 元件命名 a.全小寫加連線符 vue.component my component name 當使用 kebab case 短橫線分隔命名 定義乙個元件時,你也必須在引用這個自定義元素時使用 kebab case,例如。b 駝峰式 vue.component mycomponentname 當使...
Vue學習筆記 6 元件註冊
3.基礎元件的自動化全域性註冊 我們前一篇提到了元件註冊,但是那裡用的是我們的全域性註冊。註冊分為區域性註冊和全域性註冊 下面開始講解 lang en charset utf 8 titletitle src script head v for i in names v bind value i x...
vue學習筆記(五) 元件通訊
關於vue父子元件通訊 github suerimn 如果元件是乙個單頁面,元件之間存在父子關係,資料傳遞就需要根據父子不同的地位使用不同的辦法。借助新建的electron vue專案自帶的兩個元件來說明。目錄結構如下 其中landingpage.vue是父元件,systeminformation....