Vue父子組建的簡單通信之控制開關(guān)Switch的實現(xiàn)
Vue在目前是很好的框架,第一次使用Vue開發(fā)項目,剛開始的時候在一個控制開關(guān)的組件都花費了很久的時間,問題解決了,把自己的一些小問題給記錄下來,方便以后看及幫助像我這樣的初級萌新解決遇到的相同問題。
問題: 父組件傳入值到子組件,子組件修改之后怎樣傳回到父組件
父組件:內(nèi)部首先要有三步
1、父組件中引用子組件
2、父組件中注冊子組件
3、在子組件上綁定傳值
父組件
<template> <div class="hello"> <ul> <li @click="changeFlag">點擊開關(guān)----------------父組件默認為{{flag}}</li> </ul> <v-child :childFlag='flag' @parentChangeFlag='parentChangeFlag'></v-child> //第三部 </div> </template> <script> import child from '子組件地址' //第一步 data(){ return{ flag:false }}, components:{ 'v-child': child //第二步 } </script>
在第三步驟里,綁定了一個childFlag傳給子組件,其值為flag
子組件
< template > <div class = "hello" > <ul > <li@click = "parentChangeFlag" > 顯示 { { childFlag } }---子元素: { { flag2 } } < /li> <li @click="parentChangeFlag" v-show="childFlag"><img src="./images / ios_switch_off.png " alt=""> </li> <li @click="parentChangeFlag " v-show=" ! childFlag "><img src=". / images / ios_switch_on.png " alt=""></li> </ul> </div> </template> < script > export default { props: { childFlag: { type: Boolean, default: true } }, data() { return { flag2: this.childFlag }; }, watch: { childFlag(flag2) { this.flag2 = this.childFla } },methods: { // 子組件傳值給父組件 parentChangeFlag(){ this.flag2 = !this.flag2 this.$emit('parentChangeFlag',this.flag2) } }};</script>
在父組件里,傳了一個childFlag下來,我們要在子組件里去接收,方式用props,具體的可以看官方文檔, 創(chuàng)建接收之后呢,我們需要把傳進來的值綁定給我們子組件的data值即(flag2),完成這一步的話,我們就完成了父組件往子組件進行傳值。
上面只是完成了父傳子,下面講述怎么子傳父
子組件所需做的事情:
首先,我們需要在子組件里進行改變其狀態(tài)值,這樣我們就創(chuàng)建了一個parentChangeFlag點擊事件,進而改變當前的子元素的(flag2)值;
其次,改變完當前的值,我們就要把子元素的狀態(tài)值給傳回父組件,這樣就用到了$emit方法,this.$emit('function',Value); function指父組件里監(jiān)聽子元素點擊事件的函數(shù);Value就代表你需要傳回父元素的值。
父組件所需做的事情:
在父組件中,創(chuàng)建一個監(jiān)聽子元素改變data值的函數(shù)(即@parentChangeFlag='parentChangeFlag')
methods: { changeFlag() { //父組建點擊改變元素傳值給子組件 this.flag = !this.flag }, parentChangeFlag: function(flag2) { //父組件監(jiān)聽子組件點擊的函數(shù) flag2為子組件傳進來的值,把值賦給當前元素,就實現(xiàn)了父子之間的通信 console.log(flag2) this.flag = flag2 } }
當你完成父子組件各自所需要的工作時候,就恭喜你了,已經(jīng)完成了Switch的效果,效果圖如下
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
vue中的this.$router.push()路由傳值方式
這篇文章主要介紹了vue中的this.$router.push()路由傳值方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-10-10vue3如何使用provide實現(xiàn)狀態(tài)管理詳解
Vue3中有一對新增的api,provide和inject,熟悉Vue2的朋友應(yīng)該明,這篇文章主要給大家介紹了關(guān)于vue3如何使用provide實現(xiàn)狀態(tài)管理的相關(guān)資料,需要的朋友可以參考下2021-10-10vue.js element-ui validate中代碼不執(zhí)行問題解決方法
這篇文章主要介紹了vue.js element-ui validate中代碼不執(zhí)行問題解決方法,需要的朋友可以參考下2017-12-12Vue3 + MybatisPlus實現(xiàn)批量刪除功能(詳細代碼)
這篇文章主要介紹了Vue3 + MybatisPlus實現(xiàn)批量刪除功能,本文通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友參考下吧2024-03-03如何解決element-ui中select下拉框popper超出彈框問題
這篇文章主要介紹了如何解決element-ui中select下拉框popper超出彈框問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-04-04vue-admin-template框架搭建及應(yīng)用小結(jié)
?vue-admin-template是基于vue-element-admin的一套后臺管理系統(tǒng)基礎(chǔ)模板(最少精簡版),可作為模板進行二次開發(fā),這篇文章主要介紹了vue-admin-template框架搭建及應(yīng)用,需要的朋友可以參考下2023-05-05