1.父傳子
父組件准備一個數據,通過自定義屬性給子組件賦值,進行傳遞
在子組件中通過 props 屬性來接收參數
<body> <div id="app"> <son passdata="msg"></son> </div> </body> <script> Vue.component('son', { template: '<div>父組件的數據為:{{ passdata }}</div>', props: ['passdata'] }) new Vue({ el: '#app', data: { msg: '父組件數據' } }) </script>
2.子傳父
在子組件准備一個數據,通過 this.$emit('自定義事件', '參數'),進行傳遞。this.$emit 相當於要執行子組件的自定義事件,並且傳入參數
在父組件中給子組件注冊好自定義事件,並且實現這個方法,就可以得到參數了。<son @自定義事件="getval">
<body> <div id="app">
//myevent是子組件中的事件 <son @myevent='getVal'></son> </div> </body> <script> Vue.component('son', {
//①通過事件觸發passval方法 template: `<div>給父組件傳參<button @click="passval">傳參</button></div>`, data(){ return { son: 'son數據' } }, methods: { passval(){
//②執行子組件中的myevent事件,通過$emit進行傳遞(this.son為傳遞的數據) this.$emit('myevent', this.son) } } }) new Vue({ el: '#app', methods: {
//③value就是傳遞過來的數據 getVal(value){ console.log(value) } } }) </script>
3.並列組件傳參
創建一個公用的 bus (vue 實例) var vm = new Vue()
在 A 組件傳入數據 vm.$emit('passval', this.name)
在 B 組件接收數據 vm.$on('passval' ,function(value){})
<body> <div id="app"> <coma></coma> <comb></comb> </div> </body> <script>
//①創建一個公共實例 var vm = new Vue() Vue.component('coma', {
//通過事件觸發 myclick方法去傳參 template: `<div><button @click="myclick"></button></div>`, data() { return { name: 'coma' } }, methods: { myclick: function(){
//向公共實例傳入數據 vm.$emit('passval', this.name) } } }) Vue.component('comb', { template: `<div>comb</div>`, mounted() {
//接收數據 vm.$on('passval', function(value){ console.log(value) }) } }) new Vue({ el: '#app' }) </script>