• vue3使用v-model控制子组件进行双向数据绑定


    vue2写法:

    父组件调用子组件:

    v-show="isShow"/>

    子组件想要消失, 在子组件写:

    this.$emit("update:isShow",false);

    具体代码就不粘贴了

    vue3写法: 

    父组件核心代码:

    v-model:a="xxx"

    子组件核心代码:

    defineProps({
      a: 数据类型, // 父页面传递的数据
    });

    interface IEmits {
      (e: 'update:a', arg1: 数据类型): void;
    }

    const emits = defineEmits();

    调用父组件的方法:
    emits("update:isShow", false);
     

    使用示例:

    注意: v-model:isShow="isShow" 如果拆开写就是   @update:isShow="bol=>isShow=bol"  :isShow="isShow"

    父组件代码如下:

    1. <script setup>
    2. import { ref, defineAsyncComponent } from 'vue'
    3. // 异步组件
    4. const ChildA = defineAsyncComponent(() => import('./components/Test.vue'));
    5. const isShow = ref(false);
    6. const show = () => {
    7. isShow.value = true
    8. }
    9. </script>
    10. <template>
    11. <input type="button" value="我是父组件中的按钮, 让子组件出现" @click="show">
    12. <!-- v-model:isShow="isShow"=> @update:isShow="bol=>isShow=bol" :isShow="isShow" -->
    13. <ChildA v-model:isShow="isShow" />
    14. </template>
    15. <style scoped>
    16. </style>

    子组件逻辑:

    因为 v-model:isShow="isShow" 如果拆开写就是   @update:isShow="bol=>isShow=bol"  :isShow="isShow"

    所以:

    defineProps({
      isShow: Boolean
    });

    const hide = () => {
      emits("update:isShow", false);
    }

    子组件代码如下:

    1. <script setup lang="ts">
    2. // 父组件传数据 v-model:isShow="isShow"
    3. // v-model:isShow="isShow"=> @update:isShow="bol=>isShow=bol" :isShow="isShow"
    4. defineProps({
    5. isShow: Boolean
    6. });
    7. interface IEmits {
    8. (e: 'update:isShow', arg1: Boolean): void;
    9. }
    10. const emits = defineEmits<IEmits>();
    11. const hide = () => { // 因为父页面传过来的方法相当于是bol=>isShow=bol, 所以传false就会消失
    12. emits("update:isShow", false);
    13. }
    14. </script>
    15. <template>
    16. <div v-show="isShow">
    17. <button @click="hide">我是子组件,点我消失</button>
    18. </div>
    19. </template>
    20. <style scoped>
    21. button {
    22. margin: 10px;
    23. }
    24. </style>

  • 相关阅读:
    DoLa:对比层解码提高大型语言模型的事实性
    Springboot中国古代史在线学习网站毕业设计源码260839
    前端开发基础
    vscode运行dlv报错超时
    Linux系统管理技术手册——第3章 引导和关机
    java同步方法
    Maven入门与开箱即用
    Mysql其他日志
    读vue源码搞懂响应式原理
    Latex数学符号查表
  • 原文地址:https://blog.csdn.net/qq_42750608/article/details/133593458