Vue組件傳值方式(props屬性,父到子,子到父,兄弟傳值)
更新時間:2024年06月07日 09:45:16 作者:web Rookie
這篇文章主要介紹了Vue組件傳值方式(props屬性,父到子,子到父,兄弟傳值),具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
前言
Vue是數(shù)據(jù)驅(qū)動視圖更新的框架,平時寫業(yè)務(wù)時,都會把頁面不同模塊拆分成一個一個vue組件, 所以對于vue來說組件間的數(shù)據(jù)通信非常重要
提示:以下是本篇文章正文內(nèi)容,下面案例可供參考
一、props是什么?
props是Vue實例上的一個屬性,用于組件的傳值作用:為了接收外面?zhèn)鬟^來的數(shù)據(jù),與data、methods等是一個級別的配置項。props在子屬性和父屬性之間形成一個單向向下的綁定(單向數(shù)據(jù)流)- 當父屬性更新時,它會向下流向子屬性,但不會反過來。這可以防止子組件意外改變父組件的狀態(tài)
使用規(guī)則
<script>
export default {
//使用方式一
props:["count"],
//使用方式二
props:{
count:{
//type:類型規(guī)定
type:Number,
//default:默認值
default:0,
//require:是否是必傳
require:true,
}
},
}
</script>
二、父傳子 props
實現(xiàn)步驟
- 父傳子通過
props實現(xiàn) - 父組件通過自定義變量傳入子組件
- 子組件利用
props接收父組件值 - 接收
props不能修改,但是可以在組件中直接使用 - 如果想要修改
props,先把props賦值給其他變量,在進行修改
代碼實現(xiàn)
//父組件
<template>
<div style="outline:1px solid red">
<h1>我是父組件</h1>
<button @click="count+=1">要傳遞的值{{count}}</button>
//第三步通過v-bind動態(tài)傳入子組件
<Child :count="count"></Child>
</div>
</template>
<script>
//第一步導入組件
import Child from "../child/index.vue"
export default {
//第二步組件注冊
components:{
Child,
},
data () {
return {
count: 1
}
}
}
//子組件
<template>
<div style="outline:1px solid green">
<h1>我是子組件</h1>
// 第二步在頁面中使用
<div>接收父組件傳值:{{count}}</div>
</div>
</template>
<script>
export default {
//第一步利用 props 接收
//可以直接在頁面中使用,但不可修改;修改需要先將 props 中的數(shù)據(jù)賦值給 data 中的變量
// props:["count"],
props:{
count:{
type:Number,
default:0,
require:true,
}
},
}
效果展示

二.子傳父 $emit
實現(xiàn)步驟
- 子傳父通過
$emit實現(xiàn) - 在子組件中通過
$emit方法傳值給父組件 - 在父頁面中的子組件標簽中自定義事件接收
代碼實現(xiàn)
//子組件
<template>
<div style="outline:1px solid green">
<h1>我是子組件</h1>
<button @click="give">傳遞給父組件</button>
</div>
</template>
<script>
export default {
methods:{
give(){
//第一步調(diào)用 $emit 傳遞參數(shù)
//emit 中第一個參數(shù)是在父頁面中接收的 事件名稱
//emit 中第二個嘗試是要傳遞的數(shù)據(jù)
this.$emit("child",`我是子組件值+ ${new Date().getTime()}`)
}
}
}
// 父組件
<template>
<div style="outline:1px solid red">
<h1>我是父組件</h1>
<div>我是接收子組件的值:{{this.childValue}}</div>
// 第一步在子組件中自定義事件接收 emit 傳遞的事件
<Child :count="count" @child="accept"></Child>
</div>
</template>
<script>
import Child from "../child/index.vue"
export default {
components:{
Child,
},
data () {
return {
childValue:"",
}
},
methods:{
// 第二步在事件接收使用 子組件的傳值
accept(obj){
this.childValue = obj
}
}
}
效果展示

三.兄弟傳值 EventBus
實現(xiàn)步驟
- 兄弟之間傳值通過 EventBus實現(xiàn)
- 在components文件中新建一個 js 文件,頁面中導入Vue實例,然后導出一個new Vue()
- 在需要兄弟之間傳值的組件中導入這個文件
- 傳值時通過導入的文件調(diào)用$emit 實現(xiàn)($emit("事件名稱",需要傳遞的值))
- 接收時通過導入的文件調(diào)用$on通過回調(diào)函數(shù)實現(xiàn)
代碼實現(xiàn)
// component 文件夾中新建 eventBus.js 文件,用來實現(xiàn)兄弟組件通信 import Vue from "vue"; export default new Vue()
// 組件 A
<template>
<div style="width: 100%; height: 100px; outline: 1px solid red">
<button @click="send">A組件給B組件傳值</button>
</div>
</template>
<script>
import bus from "../eventBus";
export default {
methods: {
send() {
bus.$emit("share", `我是A組件+ ${new Date().getTime()}`);
},
},
};
</script>
<style lang="less" scoped>
</style>
// 組件 B
<template>
<div style="width:100%;height:100px;outline:1px solid green">
接收A組件的值{{this.accept}}
</div>
</template>
<script>
import bus from "../eventBus"
export default {
data(){
return{
accept:''
}
},
mounted(){
bus.$on("share",val=>{
this.accept = val
})
}
}
</script>
效果展示

總結(jié)
- 父傳值子通過
props實現(xiàn) - 子傳父通過
emit自定義事件 實現(xiàn) - 兄弟傳值通過
eventBus實現(xiàn)
目前暫時總結(jié)三種常用的組件傳值方法
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
antd?vue中,如何在form表單中的自定義組件使用v-decorator
antd?vue中,在form表單中的自定義組件使用v-decorator問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-04-04
vite+vue3中使用mock模擬數(shù)據(jù)問題
這篇文章主要介紹了vite+vue3中使用mock模擬數(shù)據(jù)問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-03-03
vue+elementui實現(xiàn)下拉表格多選和搜索功能
這篇文章主要為大家詳細介紹了vue+elementui實現(xiàn)下拉表格多選和搜索功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-11-11
vuex state中的數(shù)組變化監(jiān)聽實例
今天小編就為大家分享一篇vuex state中的數(shù)組變化監(jiān)聽實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-11-11
vue 綁定對象,數(shù)組之數(shù)據(jù)無法動態(tài)渲染案例詳解
這篇文章主要介紹了vue 綁定對象,數(shù)組之數(shù)據(jù)無法動態(tài)渲染案例詳解,本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下2021-09-09

