Vue組件通訊
阿新 • • 發佈:2018-07-02
export 自定義 特性 傳遞 sel inpu 發送 click assets
Vue最常用的組件通訊有三種:父->子組件通訊、子->父組件通訊,兄弟組件通訊.(template用的pug模板語法)
1.父->子組件通訊
父->子組件通訊,是通過props進行數據傳遞,並且具有這幾個特性,單向傳遞,子組件接收的數據不可以更改,如果更改,會發出警告,每次父組件更新時,子組件的所有 prop 都會更新為最新值.
1 父組件 2 <template lang="pug"> 3 .father 4 Children(:name=‘msg‘) 5 </template> 6 <script> 7 8 import Children from ‘./Children‘ 9 export default{ 10 name: ‘father‘, 11 data () { 12 return { 13 msg: ‘我是father的數據‘ 14 } 15 } 16 } 17 </script>
1 子組件 2 <template lang="pug"> 3 .children 4 .box {{name}} 5 </template> 6 7 <script> 8 export default { 9 name: ‘father‘, 10 // props: [‘name‘], 1.props的第一種寫法11 // props: { 2.props的第二種寫法 12 // name: Array 13 // }, 14 props: { 3.props的第三中寫法(推薦) 15 name: { 16 type: String 17 } 18 }, 19 data () { 20 return { 21 msg: ‘我是children的數據‘ 22 } 23 } 24 } 25 </script>
1 2.子->父組件通訊 2 3 一般子->父組件通訊是通過Events事件進行值得傳遞4 5 父組件 6 <template lang="pug"> 7 .father 8 Children(@hand=‘hand‘) //自定義事件1 </template> 9 10 <script> 11 import Children from ‘./Children‘ 12 export default { 13 name: ‘father‘, 14 data () { 15 return { 16 msg: ‘我是father的數據‘ 17 } 18 }, 19 components: { 20 Children 21 }, 22 methods: { 23 hand (msg) { 24 alert(msg) //拿到子組件傳遞的值 25 } 26 } 27 } 28 </script>
1 子組件 2 <template lang="pug"> 3 .children 4 input(type=‘button‘ value=‘clickMe‘ @click=‘handle‘) 5 </template> 6 7 <script> 8 export default { 9 name: ‘children‘, 10 data () { 11 return { 12 msg: ‘我是children的數據‘ 13 } 14 }, 15 methods: { 16 handle () { 17 this.$emit(‘hand‘, this.msg) //發送事件名+傳遞的值 18 } 19 } 20 </script>
3.兄弟組件通訊
由上可知,父子組件通訊都會有一個媒介,相當於一個傳遞信息的介質,才可以使得數據傳遞過去。兄弟組件通訊業需要一個介質,我們通常稱之為事件線~
1.創建一個組件 名字:eventBus(隨便起) 我放在了src/asstest/eventBus/index.js文件夾下
1 import Vue from ‘vue‘ 2 export default new Vue()
2.創建第一個兄弟組件,名字:Emit
1 <template lang="pug"> 2 .emit 3 .box Emit組件a 4 button(@click=‘show‘) 向on組件傳值 5 </template> 6 7 <script> 8 import bus from ‘../assets/eventBus‘ 9 export default { 10 methods: { 11 show () { 12 bus.$emit(‘user‘, ‘haha‘) 13 } 14 } 15 } 16 </script>
3.創建第二個兄弟組件,名字:On
1 <template lang="pug"> 2 .on 3 .cont 接受emit組件的數據:{{msg}} 4 </template> 5 6 <script> 7 import bus from ‘../assets/eventBus‘ 8 export default { 9 data () { 10 return { 11 msg: ‘on‘ 12 } 13 }, 14 mounted () { 15 let self = this 16 bus.$on(‘user‘, (msg) => { 17 self.msg = msg 18 }) 19 } 20 } 21 </script>
在vue中常用的傳值方式也就是這三種,但方放不局限於這三種。希望喜歡我的小夥伴們繼續支持我。
Vue組件通訊