Vue在目前是很好的框架,第一次使用Vue開發專案,剛開始的時候在一個控制開關的元件都花費了很久的時間,問題解決了,把自己的一些小問題給記錄下來,方便以後看及幫助像我這樣的初級萌新解決遇到的相同問題。
問題: 父元件傳入值到子元件,子元件修改之後怎樣傳回到父元件
父元件:內部首先要有三步
1、父元件中引用子元件
2、父元件中註冊子元件
3、在子元件上繫結傳值
父元件
<template>
<div class="hello">
<ul>
<li @click="changeFlag">點選開關----------------父元件預設為{{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,具體的可以看官方文件,
建立接收之後呢,我們需要把傳進來的值繫結給我們子元件的data值即(flag2),完成這一步的話,我們就完成了父元件往子元件進行傳值。
上面只是完成了父傳子,下面講述怎麼子傳父
子元件所需做的事情:
首先,我們需要在子元件裡進行改變其狀態值,這樣我們就建立了一個parentChangeFlag點選事件,進而改變當前的子元素的(flag2)值;
其次,改變完當前的值,我們就要把子元素的狀態值給傳回父元件,這樣就用到了$emit方法,
this.$emit(`function`,Value); function指父元件裡監聽子元素點選事件的函式;Value就代表你需要傳回父元素的值。
父元件所需做的事情:
在父元件中,建立一個監聽子元素改變data值的函式(即@parentChangeFlag=`parentChangeFlag`)
methods:{
changeFlag(){
//父組建點選改變元素傳值給子元件
this.flag = !this.flag
},
parentChangeFlag:function(flag2){
//父元件監聽子元件點選的函式 flag2為子元件傳進來的值,把值賦給當前元素,就實現了父子之間的通訊
console.log(flag2)
this.flag = flag2
}
}複製程式碼
當你完成父子元件各自所需要的工作時候,就恭喜你了,已經完成了Switch的效果,效果圖如下
我是萌新,有啥更好的也希望小夥伴們告訴我,一起進步,小夥伴要是感覺對你們有啟發,也可以給我點個贊?,感謝你的閱讀。