Vue2的組件props通信方式
在Vue2中組件的props的數據流動改為了只能單向流動,即只能由組件外(調用組件方)通過組件的DOM屬性attribute
傳遞props
給組件內,組件內只能被動接收組件外傳遞過來的數據,並且在組件內,不能修改由外層傳來的props數據。
比如要實現一個這樣的開關
1.父組件通過props將初始的值傳到子組件
2.子組件接收到初始值后,創建一個副本數據(由於從父組件直接獲取到的props不能更改,data中的數據可以更改,這才創建一個可以更改數據的副本)
1 props: [ 2 'checkType' // 當前checkBox的狀態,選中還是未選中 3 ], 4 data () { 5 return { 6 myCheckType: this.checkType 7 } 8 }
3.子組件創建一個監聽,在從父組件傳來的值改變的時候,重新給副本數據賦值
1 watch: { 2 checkType (val) { 3 this.myCheckType = val 4 } 5 }
4.子組件綁定改變事件,在觸發改變的時候,改變副本數據的值,並將改變后的值$emit給父組件
<img src="../../assets/images/icon_checkbox1_32^.png" @click="toggle">
1 methods: { 2 toggle (status) { 3 this.myCheckType = !this.myCheckType 4 this.$emit('changeType', this.myCheckType) 5 const event = window.event 6 event.stopPropagation() 7 } 8 }
5.父組件中監聽子組件$emit的事件,將子組件傳遞的值重新賦值給data
<form_list :checkType="test.checkType" @changeType="toggle"></form_list>
1 data () { 2 return { 3 test: { 4 checkType: false 5 } 6 } 7 }, 8 methods: { 9 toggle (data) { // data--子組件傳遞的值 10 this.test.checkType = data 11 } 12 }
6.在父組件中實現了值得改變,傳遞到子組件中
7.如果在循環中使用組件,子組件需要接收循環的索引;在子組件向父組件$emit的時候,數據中同時包括索引。
8.父組件能夠借助索引將子組件中要傳遞的數據插入該索引所在的數據集