解析一下//父组件 <script setup> // This starter template is using Vue 3 <script setup> SFCs // Check out https://vuejs.org/api/sfc-script-setup.html#script-setup import HelloWorld from './components/test3.vue'; const hello = (val) =>{ console.log('传递的参数是:'+ val); } </script> <template> <img alt="Vue logo" src="./assets/logo.png" /> <HelloWorld msg="传递吧" @hello="hello"> <template v-slot:cacao> <span>是插槽吗</span> </template> <template v-slot:qwe> <span>meiyou</span> </template> </HelloWorld> </template> //子组件 export default { name: 'test3', props: ['msg'], emits:['hello'], //这里setup接收两个参数,一个是props,一个是上下文context setup(props,context){ /** * props就是父组件传来的值,但是他是Porxy类型的对象 * >Proxy:{msg:'传递吧'} * 可以当作我们自定义的reactive定义的数据 */ /** * context是一个对象 包含以下内容: * 1.emit触发自定义事件的 * 2.attrs 相当于vue2里面的 $attrs 包含:组件外部传递过来,但没有在props配置中声明的属性 * 3.slots 相当于vue2里面的 $slots * 3.expose 是一个回调函数 */ console.log(context.slots); let person = reactive({ name: '张三', age: 17, }) function changeInfo(){ context.emit('hello', 666) } //返回对象 return { person, changeInfo } //返回渲染函数(了解) 这个h是个函数 //return () => h('name','age') } } </script>
时间: 2024-02-14 13:23:12 浏览: 278
这是一个Vue 3的单文件组件,包含父组件和子组件。父组件中通过import导入了一个名为HelloWorld的子组件,同时定义了一个函数hello用于处理子组件触发的自定义事件hello。在template标签中,使用了HelloWorld组件,并传递了一个props属性msg和一个自定义事件hello,同时使用了两个具名插槽cacao和qwe。
子组件中定义了一个名为test3的组件,通过props接收父组件传递的值msg,通过emits定义了一个自定义事件hello。在setup函数中,接收了props和context两个参数,其中props是父组件传递的值,context是一个对象,包含emit、attrs、slots和expose四个属性。通过reactive定义了一个名为person的响应式对象,以及一个名为changeInfo的函数,用于触发自定义事件hello。最后通过return语句将person和changeInfo返回,以供父组件使用。
阅读全文