vue3中defineEmits与defineProps的用法实例

 更新时间:2023年12月10日 08:53:34   作者:cocoonne  
这篇文章主要介绍了vue3中defineEmits/defineProps的用法实例,需要的朋友可以参考下

vue3 setup语法糖中的defineEmits/defineProps的用法

这两个 api 都是在 setup 语法糖里面使用的,并且不需要引入

defineProps:父组件给子组件传递参数

defineEmits:在子组件中调用父组件的回调函数,并且可传参

https://cn.vuejs.org/api/sfc-script-setup.html#defineprops-defineemits

defineEmits

父组件绑定在子组件中绑定自定义事件,子组件可用 emits 执行

  • 父组件绑定事件:@increase="handleIncrease"

  • 父组件回调函数:const handleIncrease = (num: number) => {}

  • 子组件定义 emit

// ts 专有
const emits= defineEmits<{
    (e: 'increase', num: number): void
}>()

// js
let emits = defineEmits(['startChange', 'endChange'])
  • 子组件调用 emit
emits('increase', 1);

父组件

<template>
  <section class="parent">
    <childVue :num="nums" @increase="handleIncrease"></childVue>
  </section>
</template>

<script setup>
  import childVue from './child.vue';
  import { ref } from 'vue';
  const nums = ref(0);
    
  // 回调函数
  const handleIncrease = (num: number) => {
    nums.value += num;
  };
</script>

子组件

<template>
  <section class="box" @click="handelClick">{{ num }}</section>
</template>

<script setup>
// ts 专有
const emits= defineEmits<{
    (e: 'increase', num: number): void
}>()
            
const handelClick = () => {
    emits('increase', 1);
};
</script>

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'
// se

//defineProps 来接收组件的传值
const props = defineProps<{
    ftext: string,
}>()

// 复杂写法
const props = defineProps<{
    ftext: {
        type: string,
        required: false,
        default: 'hhh'
    }
}>()


// 在这里就用 props.sideCollapse
</script>

props 双向绑定

当我们想把父组件传过来的参数变成双向绑定时,即可读也可写

  • v-model:sideCollapse="sideCollapse"
  • 相当于多绑定了一个自定义事件 update:sideCollapse
  • emits('update:sideCollapse', 要变成的值)

父组件

<script setup lang="ts">
import { ref } from 'vue'

let sideCollapse = ref(false)
</script>

<template>
    <nav-header v-model:sideCollapse="sideCollapse"></nav-header>
</template>

子组件

const props = defineProps<{
    sideCollapse: boolean,
}>()

// let emits = defineEmits(['update:sideCollapse'])  js写法

// ts写法
const emits = defineEmits<{
    (e: 'update:sideCollapse', sideCollapse: boolean): void
}>()


function toggle() {
    // props.sideCollapse = !props.sideCollapse  不能直接修改!
    
    // 要这样修改
    emits('update:sideCollapse', !props.sideCollapse)
}

到此这篇关于vue3中defineEmits/defineProps的用法的文章就介绍到这了,更多相关defineEmits/defineProps的用法内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Vue项目的表单校验实战指南

    Vue项目的表单校验实战指南

    这篇文章主要介绍了Vue项目表单校验的相关资料,前端表单校验能减少无效请求,保护后端接口,使用ElementPlus表单组件进行校验,需要准备表单对象、规则对象并进行双向绑定,用户名、密码以及协议勾选等字段都需符合特定规则,需要的朋友可以参考下
    2024-10-10
  • 解决elementui上传组件el-upload无法第二次上传问题

    解决elementui上传组件el-upload无法第二次上传问题

    这篇文章主要介绍了解决elementui上传组件el-upload无法第二次上传问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-03-03
  • 简单了解Vue computed属性及watch区别

    简单了解Vue computed属性及watch区别

    这篇文章主要介绍了通过实例解析Vue computed属性及watch区别,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-07-07
  • vue.js前后端数据交互之提交数据操作详解

    vue.js前后端数据交互之提交数据操作详解

    这篇文章主要介绍了vue.js前后端数据交互之提交数据操作,结合实例形式较为详细的分析了vue.js前后端数据交互相关的表单结构、约束规则、数据提交等相关操作技巧与注意事项,需要的朋友可以参考下
    2018-04-04
  • vue 实现超长文本截取,悬浮框提示

    vue 实现超长文本截取,悬浮框提示

    这篇文章主要介绍了vue 实现超长文本截取,悬浮框提示,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-07-07
  • axios如何取消重复无用的请求详解

    axios如何取消重复无用的请求详解

    这篇文章主要给大家介绍了关于axios如何取消重复无用的请求的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用axios具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-12-12
  • 基于Vue3实现一个日期计算器的操作方案

    基于Vue3实现一个日期计算器的操作方案

    该文章主要介绍了在线日期计算器工具的开发过程,包括核心功能设计、实现细节、状态管理和日期处理技巧,工具提供了日期间隔计算、日期加减计算、年龄计算和工作日计算等功能,需要的朋友可以参考下
    2026-01-01
  • vue + el-form 实现的多层循环表单验证

    vue + el-form 实现的多层循环表单验证

    这篇文章主要介绍了vue + el-form 实现的多层循环表单验证,帮助大家更好的理解和使用vue框架,感兴趣的朋友可以了解下。
    2020-11-11
  • Vue中v-model的使用示例详解

    Vue中v-model的使用示例详解

    v-model就是vue的双向绑定的指令,能将页面上控件输入的值同步更新到相关绑定的data属性,也会在更新data绑定属性时候,更新页面上输入控件的值,这篇文章主要介绍了Vue之v-model的使用,需要的朋友可以参考下
    2025-04-04
  • vue.js加载新的内容(实例代码)

    vue.js加载新的内容(实例代码)

    vue是一种轻巧便捷的框架,那么如何进行对于数据加载的刷新呢?以下就是我对于vue.js数据加载的一点想法
    2017-06-06

最新评论