当前位置: 代码网 > it编程>前端脚本>Vue.js > vue3 setup语法糖之组件传参(defineProps、defineEmits、defineExpose)示例详解

vue3 setup语法糖之组件传参(defineProps、defineEmits、defineExpose)示例详解

2024年06月01日 Vue.js 我要评论
vue3官方文档defineprops和defineemits都是只能在<script setup>中使用的编译器宏。他们不需要导入,且会随着<script setup>的处理

vue3官方文档 

  • defineprops 和 defineemits 都是只能在 <script setup> 中使用的编译器宏。他们不需要导入,且会随着 <script setup> 的处理过程一同被编译掉。
  • defineprops 接收与 props 选项相同的值,defineemits 接收与 emits 选项相同的值。

父传子  - defineprops

 父组件

<template>
    <div class="father">
        <p>我是父组件</p>
        <!--  -->
        <son :ftext="ftext"></son>
    </div>
</template>
<script setup>
import {ref} from 'vue'
import son from './son.vue'
const ftext = ref('我是父组件-text')
</script>

子组件

<template>
    <div class="son">
        <p>我是子组件</p>
       <!-- 展示来自父组件的值 -->
       <p>接收到的值:{{ftext}}</p>
    </div>
</template>
<script setup>
import {ref} from 'vue'
// setup 语法糖写法
 
//defineprops 来接收组件的传值
const props = defineprops({
    ftext: {
        type:string
    },
})
</script>

子传父 - defineemits

子组件: 

<template>
    <div class="son">
        <p>我是子组件</p>
        <button @click="tovalue">点击给父组件传值</button>
    </div>
</template>
    
<script setup>
import {ref} from 'vue'
// setup 语法糖写法
//用defineemits()来定义子组件要抛出的方法,语法defineemits(['要抛出的方法'])
const emit = defineemits(['exposedata'])
 
const stext = ref('我是子组件的值-ftext')
const tovalue = ()=>{
    emit('exposedata',stext)
}
    
</script>

 父组件:

<template>
    <div class="father">
        <p>我是父组件</p>
        <!--  -->
        <son @exposedata="getdata" :ftext="ftext"></son>
    </div>
</template>
    
<script setup>
import {ref} from 'vue'
import son from './son.vue'
const ftext = ref('我是父组件-text')
const getdata = (val)=>{
    console.log("接收子组件的值",val)
}
</script>

defineexpose 

 官方解释:

使用 <script setup> 的组件是默认关闭的(即通过模板引用或者 $parent 链获取到的组件的公开实例,不会暴露任何在 <script setup> 中声明的绑定)。

可以通过 defineexpose 编译器宏来显式指定在 <script setup> 组件中要暴露出去的属性

子组件:

<template>
    <div>
        <p>我是子组件</p>
    </div>
</template>
    
<script setup>
import { ref } from 'vue';
 
    const stext = ref('我是子组件的值')
    const sfunction = ()=>{
        console.log("我是子组件的方法")
    }
    defineexpose({
        stext,
        sfunction
    })
</script>

父组件:

<template>
	<div class="todo-container">
		<p>我是父组件</p>
		<son ref="sondom"></son>
		<button @click="getsondom">点击</button>
	</div>
</template>
 
<script setup>
import { ref ,nexttick} from 'vue';
	import son from './components/son.vue'
	const sondom = ref(null) //注意这里的命名要和ref上面的命名一致
	const getsondom = ()=>{
		console.log("sondom",sondom.value)
	}
 
	//直接打印sondom的值是拿不到的,子组件节点还没生成
	nexttick(()=>{
		console.log("sondom",sondom.value)
	})
</script>

到此这篇关于vue3-setup语法糖之组件传参(defineprops、defineemits、defineexpose)的文章就介绍到这了,更多相关vue3 setup语法糖内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com