Vue組件通信之父?jìng)髯优c子傳父詳細(xì)講解
父組件傳遞給子組件
- 父組件傳遞給子組件:通過props屬性;
- 子組件傳遞給父組件:通過$emit觸發(fā)事件;
這里我們知道,父組件有一些數(shù)據(jù)需要子組件來進(jìn)行展示,那我們可以通過props
來完成組件之間的通信
通過props來完成組件之間的通信
淺談Props
那么什么是Props
呢?
- 作用:接受父組件傳遞過來的屬性
Props
是你可以在組件上注冊(cè)一些自定義的attribute(屬性);- 父組件給這些attribute(屬性)賦值,子組件通過attribute的名稱獲取到對(duì)應(yīng)的值;
在使用 script setup
的單文件組件中,props
可以使用 defineProps()
宏來聲明:
<script setup> const props = defineProps(['foo']) console.log(props.foo) </script>
數(shù)組類型
在沒有使用 script setup
的組件中,prop
可以使用 props
選項(xiàng)來聲明:
export default { props: ['foo'], setup(props) { // setup() 接收 props 作為第一個(gè)參數(shù) console.log(props.foo) } }
例子,對(duì)象語法的使用
App.vue
里面使用組件,屬性整數(shù)props所定義的
<template> <show-info name="kk" age="18" height="1.7" /> </template>
showInfo.vue
子組件
export default { props:{ name :{ type:String, default:"我是默認(rèn)值name" }, height:{ type:Number, default:2 } } }
另外:
那么type的類型都可以是哪些呢?
- String
- Number
- Boolean
- Array
- Object
- Date
- Function
- Symbol
對(duì)象類型
用對(duì)象的形式聲明props
(這個(gè)還挺常用的)
使用 script setup
defineProps({ title: String, likes: Number })
非 script setup
export default { props: { title: String, likes: Number } }
子組件傳遞給父組件
子組件傳遞給父組件通過$emit觸發(fā)事件
子組件傳遞內(nèi)容到父組件:
- 當(dāng)子組件有一些事件發(fā)生的時(shí)候,比如在組件中發(fā)生了點(diǎn)擊,父組件需要切換內(nèi)容;
- 子組件有一些內(nèi)容想要傳遞給父組件的時(shí)候;
$emit(“add”, count)
第一個(gè)參數(shù)自定義的事件名稱,第二個(gè)參數(shù)是傳遞的參數(shù)
舉一個(gè)計(jì)數(shù)器案例
- 這里我們有兩個(gè)子組件,一個(gè)父組件
- 子組件中定義好在某些情況下觸發(fā)的事件名稱
- 在父組件中以v-on(語法糖@)的方式傳入要監(jiān)聽的事件名稱,并且綁定到對(duì)應(yīng)的方法中;
- 最后,在子組件中發(fā)生某個(gè)事件的時(shí)候,根據(jù)事件名稱觸發(fā)對(duì)應(yīng)的事件
父組件App.vue
- 父組件監(jiān)聽子組件加或減的事件,通過子組件發(fā)生事件給父組件監(jiān)聽
- 父組件監(jiān)聽子組件發(fā)出的自定義事件,然后執(zhí)行相應(yīng)的操作
<template> <div class="app"> <h2>當(dāng)前計(jì)數(shù):{{counter}}</h2> <!-- 1.自定義add-counter 并且監(jiān)聽內(nèi)部的add事件 --> <add-counter @add="addBtnClick"></add-counter> <!-- 2.自定義su-counter組件,監(jiān)聽內(nèi)部的sub事件 --> <sub-counter @sub="subBtnClick"></sub-counter> </div> </template> <script> import AddCounter from './AddCounter.vue' import SubCounter from './SubCounter.vue' export default { components: { AddCounter, SubCounter }, data() { return { counter:0 } }, methods:{ addBtnClick(count) { this.counter += count }, subBtnClick(count) { this.counter -= count } } } </script>
子組件1AddCounter.vue
這里定義的是計(jì)數(shù)器的加操作 子組件事件觸發(fā)之后,通過this.$emit的方式進(jìn)行發(fā)出事件
<template> <div class="add"> <button @click="btnClick(1)">+1</button> <button @click="btnClick(5)">+5</button> <button @click="btnClick(10)">+10</button> </div> </template> <script> export default { methods:{ btnClick(count) { // 讓子組件發(fā)出去一個(gè)自定義事件 // 第一個(gè)參數(shù)自定義的事件名稱,第二個(gè)參數(shù)是傳遞的參數(shù) this.$emit("add",count) } } } </script>
3. 子組件2SubCounter.vue
這里定義的是計(jì)數(shù)器的減操作
子組件事件觸發(fā)之后,通過this.$emit
的方式進(jìn)行發(fā)出事件
<template> <div class="sub"> <button @click="btnClick(1)">-1</button> <button @click="btnClick(5)">-5</button> <button @click="btnClick(10)">-10</button> </div> </template> <script> export default { // 1.emits數(shù)組語法 emits:["addd"], methods:{ btnClick(count) { this.$emit("sub",count) } } } </script>
這個(gè)案例非常經(jīng)典,可以反復(fù)琢磨一下~
到此這篇關(guān)于Vue組件通信之父?jìng)髯优c子傳父詳細(xì)講解的文章就介紹到這了,更多相關(guān)Vue組件通信內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
vue2路由方式--嵌套路由實(shí)現(xiàn)方法分析
這篇文章主要介紹了vue2嵌套路由實(shí)現(xiàn)方法,結(jié)合實(shí)例形式分析了vue2嵌套路由基本實(shí)現(xiàn)方法與操作注意事項(xiàng),需要的朋友可以參考下2020-03-03Vue中接收二進(jìn)制文件流實(shí)現(xiàn)pdf預(yù)覽的方法
本文主要介紹了Vue中接收二進(jìn)制文件流實(shí)現(xiàn)pdf預(yù)覽的方法,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-12-12vue項(xiàng)目中封裝echarts的優(yōu)雅方式分享
在實(shí)際項(xiàng)目開發(fā)中,我們會(huì)經(jīng)常與圖表打交道,比如?訂單數(shù)量表、商品銷量表、會(huì)員數(shù)量表等等,它可能是以折線圖、柱狀圖、餅狀圖等等的方式來展現(xiàn),下面這篇文章主要給大家介紹了關(guān)于vue項(xiàng)目中封裝echarts的優(yōu)雅方式的相關(guān)資料,需要的朋友可以參考下2022-03-03vue.js如何更改默認(rèn)端口號(hào)8080為指定端口的方法
本篇文章主要介紹了vue.js如何更改默認(rèn)端口號(hào)8080為指定端口的方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-07-07Vue實(shí)現(xiàn)實(shí)時(shí)監(jiān)聽頁面寬度高度變化
這篇文章主要為大家詳細(xì)介紹了Vue如何實(shí)現(xiàn)實(shí)時(shí)監(jiān)聽頁面寬度高度變化,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2024-03-03Vue?實(shí)現(xiàn)新國標(biāo)紅綠燈效果實(shí)例詳解
這篇文章主要為大家介紹了Vue?實(shí)現(xiàn)新國標(biāo)紅綠燈效果實(shí)例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-08-08