父網頁代碼
<template> <div class="hello"> <h1 :class="ff" @mouseover="add()">這是首頁</h1> <div> <aaa :ttt="test" @aa="funck()"></aaa> </div> </div> </template> <script> import COPY from './COPY.vue' export default { name: 'HelloWorld', data () { return { test:'這是父組件的變量', ff: '' } }, methods:{ funck: function(value) { this.ff='f' }, add: function() { this.test='f' } }, components: { aaa:COPY } } </script> <style scoped> .f{ background-color: aqua } </style>
子網頁代碼
<template> <div class="hello"> <h1 :class="ttt">這是一個可以COPY的固定頁面 </h1> <p @click="fuck()"> {{ttt}}</p> <div @click="kkk()" :class="ttt">什么鬼巴西龜</div> </div> </template> <script> export default { name: 'COPY', data () { return { ooo:'這是子組件的變量' } }, props:{ ttt:{ default:0, type:Number } }, methods:{ fuck: function() { this.$emit('aa') }, kkk: function() { this.$emit('mouseover') } } } </script> <style scoped> .f{ background-color:cadetblue } </style>
詳細說明
要將父組件中的變量傳遞給子組件:在子組件中完成props方法中的變量命名后
例:父組件中--><div> <aaa :ttt="test">這里的ttt就是子組件的變量命名,獲取父組件的test變量</aaa> </div>
子組件中-->props:{ 固定寫法
ttt:{ 也可以是空對象,以下的變量值都不寫
default:0 設置默認值default為0
type:Number 這里一旦定義值的類型,如果不是Number等就會報錯
}
}
<p> {{ttt}}</p> 這里輸出ttt的值,也就是父組件中的test值
要將子組件的變量傳遞給父組件:在子組件中准備好觸發事件和方法
例:子組件中--><p @click="fuck()">當點擊這里后觸發方法fuck()</p> methods:{ fuck: function() { this.$emit('bb',this.ccc,this.aaa) 命名一個事件名bb,同時帶上當前網頁的變量ccc和aaa } 父組件中--><p @bb="test()"></p> 跟子組件事件命名相同,子組件觸發事件后運行這里的test()方法 methods:{ test: function(value1,value2) { 命名value變量1和2,如果子組件參數多個則命名多個,順序要對應 console.log(value1) 輸出value變量,即子組件的變量ccc this.ff=value2 改變當前頁面的變量ff的值等於帶過來的參數aaa }
要點擊子組件的內容觸發父組件的事件:在methods中命名一個變量和方法后,固定寫法this.$emit
例:子組件中--><p @click="add()">當點擊這里后觸發方法add()</p> methods:{ add: function() { this.$emit('aa') 命名一個事件名aa,方法運行后到父組件找到相同的事件名 } 父組件中--><p @aa="funck()"></p> 跟子組件事件命名相同,子組件觸發事件后運行這里的funck()方法 methods:{ funck: function() { this.ff='改變的值' 改變當前頁面的變量ff的值 }