笔记
Vue2
在 Vue2 中 vc身上的 $attrs 虽然可以接收父组件传递过来的属性(props接收之外的属性),但是不能做类型限制,并且在模板中使用需要{{$attrs.***}} 。
<子组件>传递参数到子组件的 $slots</子组件>,子组件可以通过
Vue3
setup 比 beforeCreate 先执行。
setup 中的 this 是 undefined ,也就是说在 setup 中不要使用 this 。
setup 可以接收2个参数。
视频内容
setup的两个注意点
setup执行的时机
- 在beforeCreate之前执行一次,this是undefined。
setup的参数
- props:值为对象,包含:组件外部传递过来,且组件内部声明接收了的属性。
- context:上下文对象
- attrs: 值为对象,包含:组件外部传递过来,但没有在props配置中声明的属性, 相当于 Vue2 中的
this.$attrs。 - slots: 收到的插槽内容, 相当于
this.$slots。 - emit: 分发自定义事件的函数, 相当于
this.$emit。
- attrs: 值为对象,包含:组件外部传递过来,但没有在props配置中声明的属性, 相当于 Vue2 中的
源码
App.vue
<template>
<!-- 给组件绑定的事件 ∈ 自定义事件, 此处的自定义事件为 hello -->
<Demo @hello="showHelloMsg" msg="你好啊" school="尚硅谷">
<!-- 在Vue3中尽量使用v-slot在给slot命名 -->
<template v-slot:qwe>
<span>尚硅谷</span>
</template>
<template v-slot:asd>
<span>尚硅谷</span>
</template>
</Demo>
</template>
<script>
//明确性优先:建议保留 .vue后缀,让导入意图更清晰
import Demo from './components/Demo.vue'
//在 Vue3 项目中,通常需要加 .vue后缀,但可以通过配置实现不加后缀。
//import Demo from './components/Demo'
export default {
name: 'App',
components:{Demo},
setup(){
//hello自定义事件的处理函数:
function showHelloMsg(value){
alert(`你好啊,你触发了hello事件,我收到的参数是:${value}!`)
}
return {
showHelloMsg
}
}
}
</script>components\Demo.vue
<template>
<!-- 给组件绑定的事件 ∈ 自定义事件, 此处的自定义事件为 hello -->
<Demo @hello="showHelloMsg" msg="你好啊" school="尚硅谷">
<!-- 在Vue3中尽量使用v-slot在给slot命名 -->
<template v-slot:qwe>
<span>尚硅谷</span>
</template>
<template v-slot:asd>
<span>尚硅谷</span>
</template>
</Demo>
</template>
<script>
//明确性优先:建议保留 .vue后缀,让导入意图更清晰
import Demo from './components/Demo.vue'
//在 Vue3 项目中,通常需要加 .vue后缀,但可以通过配置实现不加后缀。
//import Demo from './components/Demo'
export default {
name: 'App',
components:{Demo},
setup(){
//hello自定义事件的处理函数:
function showHelloMsg(value){
alert(`你好啊,你触发了hello事件,我收到的参数是:${value}!`)
}
return {
showHelloMsg
}
}
}
</script>
