• vue3关于.sync的用法


    场景描述

    我们都知道,子组件是不能够去修改父组件传递过来的数据。
    因为如果子组件去修改父组件件传递过来的数据。
    会导致数据的应用流向变得难以理解。
    但是有些时候,我们需要当子组件的数据变化后,父组件的数据也跟着变化。
    vue2中我们可以使用.sync来解决这个办法。
    那么vue3应该怎么去处理这个问题了?
    这个时候,应该怎办了?下面我们就来看一下怎么处理
    

    父组件

    <template>
        <div>
            <el-button type="primary" style="margin-left: 16px" @click="openHanlder">
                open
            </el-button>
           <child v-model:drawer="drawer"></child>  
        </div>
    </template>
    
    <script>
    import { defineComponent ,ref} from 'vue'
    export default defineComponent({
        setup()  {
            let drawer=ref(false)
            const openHanlder=()=>{
                drawer.value=true
            }
            return{
                drawer,
                openHanlder
            }
        }
    })
    </script>
    

    子组件

    <template>
      <el-drawer
        v-model="drawer"
        title="I am the title"
        direction="rtl"
      >
        <span>Hi, there!</span>
        <el-button type="primary" style="margin-left: 16px" @click="closeHander">
            关闭
        </el-button>
      </el-drawer>
    </template>
    
    <script lang="ts" >
    import { ref,defineComponent } from 'vue'
    import { ElMessageBox } from 'element-plus'
        export default {
             props:{
                drawer:{}
            },
            setup(props,{emit})  {
                const closeHander=()=>{
                    emit('update:drawer', false)
                }
                return {
                    closeHander
                }
            }
        }
    

    vue3.2中使用的是setup怎么处理了?

    有的小伙伴说我vue中使用的setup怎么处理了,
    别着急,马上写
    

    父组件

    <template>
        <div>
            <el-button type="primary" style="margin-left: 16px" @click="openHanlder">
                open
            </el-button>
           <ChaCao v-model:drawer="drawer"></ChaCao>  
        </div>
    </template>
    
    <script lang="ts"  setup>
    import {  ref} from 'vue'
    let drawer=ref(false)
    const openHanlder=()=>{
        drawer.value=true
    }
    </script>
    

    子组件

    <template>
      <el-drawer
        v-model="drawer"
        title="I am the title"
        direction="rtl"
      >
        <span>Hi, there!</span>
        <el-button type="primary" style="margin-left: 16px" @click="closeHander">
            关闭
        </el-button>
      </el-drawer>
    </template>
    
    <script lang="ts"  setup>
    import { defineProps ,defineEmits} from 'vue'
    import { ElMessageBox } from 'element-plus'
    defineProps({
        drawer:{
            type:Boolean,
            default:false
        },
    })
    let $myemit=defineEmits(['update:drawer'])
    
    const closeHander=()=>{
        $myemit('update:drawer',false)
    }
    </script>
    
  • 相关阅读:
    leetcode-----118. 杨辉三角
    leetcode-----117. 填充每个节点的下一个右侧节点指针 II
    leetcode-----116. 填充每个节点的下一个右侧节点指针
    leetcode-----115. 不同的子序列
    leetcode-----114. 二叉树展开为链表
    leetcode-----113. 路径总和 II
    leetcode-----112. 路径总和
    leetcode-----111. 二叉树的最小深度
    windows同时安装jdk7和jdk8
    使用乌龟Git连接github
  • 原文地址:https://www.cnblogs.com/IwishIcould/p/16226740.html
Copyright © 2020-2023  润新知