父元件訪問子元件的資料
a)在子元件中使用vm.$emit(事件名,資料)觸發一個自定義事件,事件名自定義
b)父元件在使用子元件的地方監聽子元件觸發的事件,並在父元件中定義方法,用來獲取資料
總結:子元件通過events給父元件傳送訊息,實際上就是子元件把自己的資料傳送到父元件
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>父子元件及元件間資料傳遞</title>
<script src="js/vue.js"></script>
</head>
<body>
<div id="itany">
<my-hello></my-hello>
</div>
<template id="hello">
<div>
<h3>我是hello父元件</h3>
<h3>訪問自己的資料:{{msg}},{{name}},{{age}},{{user.username}}</h3>
<h3>訪問子元件的資料:{{sex}},{{height}}</h3>
<hr>
<my-world :message="msg" :name="name" :age="age" @e-world="getData"></my-world>
</div>
</template>
<template id="world">
<div>
<h4>我是world子元件</h4>
<h4>訪問父元件中的資料:{{message}},{{name}},{{age}},{{user.username}}</h4>
<h4>訪問自己的資料:{{sex}},{{height}}</h4>
<button @click="send">將子元件的資料向上傳遞給父元件</button>
</div>
</template>
<script>
var vm=new Vue({ //根元件
el:'#itany',
components:{
'my-hello':{ //父元件
methods:{
getData(sex,height){
this.sex=sex;
this.height=height;
}
},
data(){
return {
msg:'網博',
name:'tom',
age:23,
user:{id:9527,username:'唐伯虎'},
sex:'',
height:''
}
},
template:'#hello',
components:{
'my-world':{ //子元件
data(){
return {
sex:'male',
height:180.5
}
},
template:'#world',
methods:{
send(){
// console.log(this); //此處的this表示當前子元件例項
this.$emit('e-world',this.sex,this.height); //使用$emit()觸發一個事件,傳送資料
}
}
}
}
}
}
});
</script>
</body>
</html>