子组件
<template>
<div>
<h1>setup注意点</h1>
<hr>
<div>{{person.name}}</div>
<div>{{person.age}}</div>
<div>{{msg}}</div>
<div>{{school}}</div>
<button @click="sonHandleHello">触发hello事件</button>
</div>
</template>
<script>
import { reactive } from '@vue/reactivity';
export default {
name: 'Vue3Study05Setup',
// props:['msg','school'],
beforeCreate(){
console.log('---beforeCreate---');
},
setup(props,context){
console.log('---setup---');//setup在beforeCreate之前执行, 在setup里面使用this无效(undefined)
console.log(props);//外部传入的值
console.log(context);
console.log(context.attrs);//给props捡漏
console.log(context.emit);//执行外部事件
console.log(context.slots);//插槽
let person = reactive({
name:'张三',
age:18,
})
function sonHandleHello(){
context.emit('hello',999)
}
return {
person,
sonHandleHello
}
},
};
</script>
<style lang="scss" scoped>
</style>
父组件
<template>
<setupDetail @hello='handleHello' :msg='msg' :school='school'>
<template v-slot:lin>
<span>尚硅谷</span>
</template>
<template v-slot:kang>
<span>尚硅谷</span>
</template>
</setupDetail>
</template>
<script>
import setupDetail from "./components/05-setup-detail.vue"
export default {
name: 'App',
components: {
setupDetail
},
setup(){
function handleHello(value){
alert('触发了hello事件,收到的参数是'+value)
}
return {
handleHello
}
},
data() {
return {
msg: 'setup注意点',
school:'尚硅谷'
};
},
}
</script>
<style>
</style>