• vue3父子组件传值,子组件暴漏方法


    1.父传子 defineProps


    父组件直接通过属性绑定的方式给子组件绑定数据,子组件通过defineProps接收函数接收


    其中v-model是完成事件绑定和事件监听的语法糖。v-model算是v-bindv-on的简洁写法,等价于

    子组件接收:

    子组件使用:props.modelValue


    2.子传父 defineEmits

    子组件通过defineEmits注册一个自定义事件,而后触发emit去调用该自定义事件,并传递参数给父组件。

    在父组件中调用子组件时,通过v-on绑定一个函数,通过该函数获取传过来的值。

    父组件传值:


    子组件接收:

    3.子组件暴漏方法,父组件调用 defineExpose

    (1)在父组件中获取在子组件的实例

    (2)在子组件中通过defineExpose暴漏方法

    子组件:


    父组件:

    4.完整代码
     

    1. //父:
    2. <template>
    3. <h2>父组件:{{ inputValue }}</h2>
    4. <CInput ref="inputRef" v-model:modelValue="inputValue"></CInput>
    5. <!-- <c-input ref="inputRef" :modelValue="inputValue" @input="inputValue = $event.target.value"></c-input> -->
    6. <button @click="submitForm">提交</button>
    7. <span v-if="errorMessage" style="color:red">{{ errorMessage }}</span>
    8. </template>
    9. <script setup>
    10. //在vue3中如何将子组件的方法暴漏
    11. //1.在父组件中获取在子组件的实例
    12. //2.在子组件中通过defineExpose暴漏方法
    13. import { ref } from 'vue'
    14. import CInput from '@/views/CInput.vue'
    15. const inputValue = ref('')
    16. const errorMessage = ref('')
    17. const inputRef = ref(null)
    18. const submitForm = () => {
    19. if(inputRef.value.validate(inputValue.value)){
    20. errorMessage.value=''
    21. } else {
    22. errorMessage.value='输入不能为空'
    23. }
    24. }
    25. </script>
    26. 子:
    27. <template>
    28. <!-- @input是一个常用的指令,用于监听原生input事件。当输入框的值发生变化时,@input指令绑定的方法会被触发。 -->
    29. <input
    30. type="text"
    31. :value="modelValue"
    32. @input="updateValue"/>
    33. </template>
    34. <script setup>
    35. import { defineProps,defineEmits,defineExpose } from 'vue'
    36. const props= defineProps({
    37. modelValue:{
    38. type:Number
    39. //require:true
    40. }
    41. })
    42. const emit = defineEmits(['update:modelValue'])
    43. //const emit = defineEmits([modelValue'])
    44. const updateValue = (event) =>{
    45. emit('update:modelValue',event.target.value)
    46. }
    47. const validate = (value)=>{
    48. //简单校验规则,输入不能为空
    49. return value.trim()!==''
    50. }
    51. //暴漏方法
    52. defineExpose({
    53. validate
    54. })

  • 相关阅读:
    QT+OSG/osgEarth编译之二十五:GeoTIFF+Qt编译(一套代码、一套框架,跨平台编译,版本:GeoTIFF-2.12.1)
    C#学习记录——在C#中操作注册表
    0830(042天 集合框架06 总结二)
    Python自定义可切片的类
    【8. 调度算法】
    IT项目管理成功的技巧通常有哪些?
    Mybatis——Mybatis入门项目从创建到完成的完整过程【单表的增删改查】
    【Python/Pytorch 】-- SVM算法
    反射和注解
    react-router 如何在组件外路由跳转
  • 原文地址:https://blog.csdn.net/weixin_40992252/article/details/143385136