摘要:直接創(chuàng)建組件使用標(biāo)簽名組件模板,根據(jù)組件構(gòu)造器來(lái)創(chuàng)建組件。相應(yīng)的,實(shí)例也被稱(chēng)為父組件。而且不允許子組件直接修改父組件中的數(shù)據(jù),強(qiáng)制修改會(huì)報(bào)錯(cuò)。
一、組件 (一)什么是組件
組件(Component)是 Vue.js最強(qiáng)大的功能之一。組件可以擴(kuò)展 HTML元素,封裝可重用的代碼組件是自定義元素(對(duì)象)。
(二)創(chuàng)建組件的兩種方式官方推薦組件標(biāo)簽名是使用-連接的組合詞,例如:
使用這種方式創(chuàng)建組件首先需要使用Vue.extend()創(chuàng)建一個(gè)組件構(gòu)造器,然后使用Vue.component(標(biāo)簽名,組件構(gòu)造器),根據(jù)組件構(gòu)造器來(lái)創(chuàng)建組件。
//1.創(chuàng)建構(gòu)造器 var MyComponent=Vue.extend({ template:"Hello World
" }); //2.創(chuàng)建組件 Vue.component("my-hello",MyComponent); //3.使用組件
這種創(chuàng)建組件的方式比較麻煩,使用的較少。
2、直接創(chuàng)建組件使用Vue.component(標(biāo)簽名,組件模板),根據(jù)組件構(gòu)造器來(lái)創(chuàng)建組件。
//1.創(chuàng)建組件 Vue.component("my-world", { template: "(三)組件的分類(lèi)hello vue.js
" }); //2.使用組件
組件分為全局組件和局部組件。
1、全局組件使用Vue.component()創(chuàng)建的組件都是全局組件。這樣的組件在任何組件內(nèi)都能使用。上面我們創(chuàng)建就是全局組件。
2、局部組件局部組件一般都是定義在實(shí)例的選項(xiàng)中,稱(chēng)為實(shí)例的子組件。相應(yīng)的,實(shí)例也被稱(chēng)為父組件。
//1.定義組件 new Vue({ el: "#app", components: { dawei: { template: "(四)引用模板my name is dawei
" } } }); //2.使用組件
很多時(shí)候我們的template模板中需要存放很多標(biāo)簽內(nèi)容,這樣的話(huà)寫(xiě)起來(lái)會(huì)很麻煩。這時(shí)候我們可以使用template標(biāo)簽。
用法如下:
//使用template標(biāo)簽new Vue({ el: "#app", components: { "my-dawei": { template: "#wbs", //選擇template標(biāo)簽 data() { return { msg: "vue.js", arr: ["a", "b", "c", "d"] } } } } });hello {{msg}}
- {{value}}
這里涉及到的幾個(gè)知識(shí)點(diǎn)得著重提一下:
在template模板中,所有的元素必須放置在一個(gè)根元素中,要不然會(huì)報(bào)錯(cuò)。例子中我們將元素放置在了 組件中的data選項(xiàng)必須是一個(gè)函數(shù)類(lèi)型,使用return返回所有的數(shù)據(jù)。 很多時(shí)候項(xiàng)目中需要在某一個(gè)地方動(dòng)態(tài)的使用不同的組件,這時(shí)候就需要使用動(dòng)態(tài)組件。 簡(jiǎn)單示例: 我是a組件 我是b組件 使用keep-alive組件緩存非活動(dòng)組件,可以保留狀態(tài),避免重新渲染,默認(rèn)每次都會(huì)銷(xiāo)毀非活動(dòng)組件并重新創(chuàng)建。 使用范例: {{x}} {{y}} 這樣的話(huà),第一次產(chǎn)生的隨機(jī)數(shù)就會(huì)被緩存,再次切換的時(shí)候也不會(huì)發(fā)生改變。 在一個(gè)組件內(nèi)部定義另一個(gè)組件,那么這對(duì)組件稱(chēng)為父子組件。子組件只能在父組件內(nèi)部使用。默認(rèn)情況下,每個(gè)組件實(shí)例的作用域是獨(dú)立的,子組件無(wú)法訪問(wèn)父組件中的數(shù)據(jù),同樣,父組件也無(wú)法訪問(wèn)子組件中的數(shù)據(jù)。 {{msg}} {{mydata}} 步驟: a、調(diào)用子組件時(shí),綁定想要獲取的父組件中的數(shù)據(jù) b、在子組件內(nèi)部,使用props選項(xiàng)聲明獲取的數(shù)據(jù),即接收來(lái)自父組件的數(shù)據(jù) 改進(jìn)上面的例子: {{msg}} 這是要傳遞給子組件的值:{{myname}} {{mydata}} 這是父組件傳遞過(guò)來(lái)的數(shù)據(jù):{{name}} 步驟: a 在子組件中使用vm.$emit(事件名,數(shù)據(jù))觸發(fā)一個(gè)自定義事件,將數(shù)據(jù)發(fā)送給父組件,事件名自定義 b 父組件在使用子組件的地方監(jiān)聽(tīng)子組件觸發(fā)的事件,并在父組件中定義方法,用來(lái)獲取數(shù)據(jù) props是單向數(shù)據(jù)綁定的,當(dāng)父組件數(shù)據(jù)發(fā)生變化時(shí),將傳遞給子組件,但是不會(huì)反過(guò)來(lái)。而且不允許子組件直接修改父組件中的數(shù)據(jù),強(qiáng)制修改會(huì)報(bào)錯(cuò)。 解決方案: 如果子組件想把它作為局部數(shù)據(jù)來(lái)使用,可以將數(shù)據(jù)存入另一個(gè)變量中再操作,不影響父組件中的數(shù)據(jù) 如果子組件想修改數(shù)據(jù)并且同步更新到父組件,兩個(gè)方法: 使用.sync顯式地觸發(fā)一個(gè)更新事件(1.0版本中支持,2.0版本中不支持,2.3版本又開(kāi)始支持) 可以將父組件中的數(shù)據(jù)包裝成對(duì)象,然后在子組件中修改對(duì)象的屬性(因?yàn)閷?duì)象是引用類(lèi)型,指向同一個(gè)內(nèi)存空間),推薦使用這種方式。 非父子組件間的通信,可以通過(guò)一個(gè)空的Vue實(shí)例作為中央事件總線(事件中心),用它來(lái)觸發(fā)事件和監(jiān)聽(tīng)事件,從而實(shí)現(xiàn)非父子組件間的通信。 用來(lái)獲取組件中的原內(nèi)容 如果組件標(biāo)簽中沒(méi)有內(nèi)容就會(huì)顯示slot中的內(nèi)容,這也就是所謂的單個(gè)插槽。 還可以對(duì)顯示的內(nèi)容進(jìn)行分組,這就是具名插槽,可以操作標(biāo)簽組中的內(nèi)容: hello vue.js 這樣,就可以對(duì)組件中的內(nèi)容實(shí)時(shí)操作。 文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。 轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/89285.html
動(dòng)態(tài)組件的使用需要綁定is屬性://點(diǎn)擊按鈕顯示不同的組件
(六)keep-alive組件
(二)組件間數(shù)據(jù)傳遞(通信)
1、子組件訪問(wèn)父組件的數(shù)據(jù)
2、父組件訪問(wèn)子組件的數(shù)據(jù)
//子組件‘my-b’內(nèi)部
methods:{
send(){//使用$emit()觸發(fā)一個(gè)事件,發(fā)送數(shù)據(jù),this指當(dāng)前子組件實(shí)例
this.$emit("e-world", this.senddata);
}
}
//在調(diào)用子組件的地方監(jiān)聽(tīng)子組件觸發(fā)的事件,調(diào)用自己的方法獲取數(shù)據(jù)
3、單向數(shù)據(jù)流
//使用.sync
data() {
return { //將要傳遞的數(shù)據(jù)放入message對(duì)象中
message: {
hello: "子組件b你好,我是父組件a"
}
}
}
4. 非父子組件間的通信
var Event = new Vue(); //空vue實(shí)例
methods: {
send() { //觸發(fā)emit事件
Event.$emit("hello", this.asmsg);
}
}
mounted() { //在子組件的鉤子函數(shù)中監(jiān)聽(tīng)該事件
Event.$on("hello", data => { //獲取值
this.bsmsg = data;
})
}
三、slot內(nèi)容分發(fā)
var vm = new Vue({
el: "#app",
components: {
"my-hello": {
template: "#hello"
}
}
});
摘要:升級(jí)的區(qū)別與的斷層式升級(jí)不同,延續(xù)了自己的風(fēng)格。在命名方式和上有一些區(qū)別,掌握它們是你升級(jí)整個(gè)項(xiàng)目的關(guān)鍵。以下內(nèi)容都是來(lái)源于個(gè)人項(xiàng)目的一些經(jīng)驗(yàn)之談,并非系統(tǒng)性的闡述??偰夸浨岸私?jīng)驗(yàn)收集器轉(zhuǎn)載自個(gè)人建了前端學(xué)習(xí)群,旨在一起學(xué)習(xí)前端。 升級(jí)的區(qū)別 與angular的斷層式升級(jí)不同,vue延續(xù)了自己的風(fēng)格。在命名方式和API上有一些區(qū)別,掌握它們是你升級(jí)整個(gè)項(xiàng)目的關(guān)鍵。以下內(nèi)容都是來(lái)源于個(gè)人...
摘要:直接創(chuàng)建組件使用標(biāo)簽名組件模板,根據(jù)組件構(gòu)造器來(lái)創(chuàng)建組件。相應(yīng)的,實(shí)例也被稱(chēng)為父組件。而且不允許子組件直接修改父組件中的數(shù)據(jù),強(qiáng)制修改會(huì)報(bào)錯(cuò)。 一、組件 (一)什么是組件 組件(Component)是 Vue.js最強(qiáng)大的功能之一。組件可以擴(kuò)展 HTML元素,封裝可重用的代碼組件是自定義元素(對(duì)象)。 (二)創(chuàng)建組件的兩種方式 官方推薦組件標(biāo)簽名是使用-連接的組合詞,例如:。 1、使用...
摘要:有興趣的同學(xué)可以查看之前發(fā)布的文章學(xué)習(xí)系列一學(xué)習(xí)實(shí)踐筆記附學(xué)習(xí)系列二學(xué)習(xí)實(shí)踐筆記附學(xué)習(xí)系列三和網(wǎng)絡(luò)傳輸相關(guān)知識(shí)的學(xué)習(xí)實(shí)踐學(xué)習(xí)系列四打包工具的使用學(xué)習(xí)系列五從來(lái)聊聊學(xué)習(xí)系列項(xiàng)目地址項(xiàng)目暫時(shí)有點(diǎn)亂,之后會(huì)進(jìn)行整理優(yōu)化。 上次學(xué)習(xí)了vue-router的使用,讓我能夠在各個(gè)頁(yè)面間切換,將頁(yè)面搭建了起來(lái)。這次則要學(xué)習(xí)vue的狀態(tài)管理模式——vuex。它類(lèi)似于redux來(lái)應(yīng)用的全局狀態(tài)。 注:本...
摘要:提供了兩種向組件傳遞參數(shù)的方式。子路由項(xiàng)路徑不要使用開(kāi)頭,以開(kāi)頭的嵌套路徑會(huì)被當(dāng)作根路徑。路由實(shí)例的方法這里學(xué)習(xí)兩個(gè)路由實(shí)例的方法和。實(shí)際上,是通過(guò)不同的將這些資源加載后打包,然后輸出打包后文件。 一、vue-router 1、簡(jiǎn)介 我們經(jīng)常使用vue開(kāi)發(fā)單頁(yè)面應(yīng)用程序(SPA)。在開(kāi)發(fā)SPA過(guò)程中,路由是必不可少的部分,vue的官方推薦是vue-router。單頁(yè)面應(yīng)用程序看起來(lái)好像...
摘要:提供了兩種向組件傳遞參數(shù)的方式。子路由項(xiàng)路徑不要使用開(kāi)頭,以開(kāi)頭的嵌套路徑會(huì)被當(dāng)作根路徑。路由實(shí)例的方法這里學(xué)習(xí)兩個(gè)路由實(shí)例的方法和。實(shí)際上,是通過(guò)不同的將這些資源加載后打包,然后輸出打包后文件。 一、vue-router 1、簡(jiǎn)介 我們經(jīng)常使用vue開(kāi)發(fā)單頁(yè)面應(yīng)用程序(SPA)。在開(kāi)發(fā)SPA過(guò)程中,路由是必不可少的部分,vue的官方推薦是vue-router。單頁(yè)面應(yīng)用程序看起來(lái)好像...
閱讀 3336·2021-11-25 09:43
閱讀 3022·2021-10-15 09:43
閱讀 1977·2021-09-08 09:36
閱讀 2930·2019-08-30 15:56
閱讀 757·2019-08-30 15:54
閱讀 2697·2019-08-30 15:54
閱讀 2988·2019-08-30 11:26
閱讀 1258·2019-08-29 17:27