父組件
<template>
<div>
<!-- 將值傳給子組件 子組件可以獲取自己想要的值 也可以忽視掉需要傳給孫子組件的值 -->
<!-- 同時獲取通過$listeners傳遞的孫子組件事件(@test2)和$emit傳遞的子組件事件($test1) -->
<Child1 :child1Info="child1" :child2Info="child2" @test1="onTest1" @test2="onTest2">
</Child1>
</div>
</template>
<script>
import Child1 from './child1';
export default {
data() {
return {
child1:"hahha",
child2:"asdsdasd"
};
},
components: { Child1 },
methods: {
onTest1(msg) {
console.log('test1 running...',msg);
},
onTest2(msg) {
console.log('test2 running',msg);
}
}
};
</script>
子組件
<template>
<div class="child-1">
<p>props-child1Info: {{child1Info}}</p>
<p>$attrs: {{$attrs}}</p>
<hr>
<!-- 通過v-bind 綁定$attrs屬性,孫子組件組件可以直接獲取父組件傳遞的值(除了child1組件中props聲明的)通過v-on綁定$listeners屬性 父組件可以獲取從孫子組件傳來的事件 -->
<Child2 v-bind="$attrs" v-on="$listeners"></Child2>
</div>
</template>
<script>
import Child2 from './child2';
export default {
props: {
child1Info: {
type: String,
default: ''
}
},
data() {
return {};
},
components: { Child2 },
mounted() {
this.$emit('test1','嘻嘻');
}
};
</script>
孫子組件
<template>
<div class="child-2">
<-- 可以直接通過$attrs來得到父組件傳遞過來的值 -->
<p> $attrs 的值: {{$attrs.child2Info}}</p>
<hr>
</div>
</template>
<script>
export default {
data() {
return {};
},
mounted() {
// 通過$emit來給父組件傳遞事件
this.$emit('test2','哈哈');
}
};
</script>
