河曲智叟 发表于 2024-6-21 13:13:47

【Vue】sync修饰符

一、介绍

作用:可以实现 子组件 与 父组件数据 的 双向绑定,简化代码
简单明白:子组件可以修改父组件传过来的props值
特点:prop属性名,可以自定义,非固定为value
   但是.sync没有v-model方便,所以当属性名确定为value,即表单元素的时候,就使用v-model
**场景 ** 封装弹框类的底子组件, visible属性 true显示 false隐藏
本质 .sync修饰符 就是 :属性名 和 @update:属性名 合写
二、语法

父组件
// .sync写法
<BaseDialog :visible.sync="isShow" />
--------------------------------------
// 完整写法
<BaseDialog
:visible="isShow"
@update:visible="isShow = $event"
/>
子组件
props: {
visible: Boolean
},

this.$emit('update:visible', false)
三、代码示例

App.vue
<template>
<div class="app">
    <button @click="openDialog">退出按钮</button>
    <!-- isShow.sync=> :isShow="isShow" @update:isShow="isShow=$event" -->
    <BaseDialog :isShow.sync="isShow"></BaseDialog>
</div>
</template>

<script>
import BaseDialog from './components/BaseDialog.vue'
export default {
data() {
    return {
      isShow: false,
    }
},
methods: {
    openDialog() {
      this.isShow = true
      // console.log(document.querySelectorAll('.box'));
    },
},
components: {
    BaseDialog,
},
}
</script>

<style>
</style>
BaseDialog.vue
<template>
<div class="base-dialog-wrap" v-show="isShow">
    <div class="base-dialog">
      <div class="title">
      <h3>温馨提示:</h3>
      <button class="close" @click="closeDialog">x</button>
      </div>
      <div class="content">
      <p>你确认要退出本系统么?</p>
      </div>
      <div class="footer">
      <button>确认</button>
      <button>取消</button>
      </div>
    </div>
</div>
</template>

<script>
export default {
props: {
    isShow: Boolean,
},
methods:{
    closeDialog(){
      this.$emit('update:isShow',false)
    }
}
}
</script>

<style scoped>
.base-dialog-wrap {
width: 300px;
height: 200px;
box-shadow: 2px 2px 2px 2px #ccc;
position: fixed;
left: 50%;
top: 50%;
transform: translate(-50%, -50%);
padding: 0 10px;
}
.base-dialog .title {
display: flex;
justify-content: space-between;
align-items: center;
border-bottom: 2px solid #000;
}
.base-dialog .content {
margin-top: 38px;
}
.base-dialog .title .close {
width: 20px;
height: 20px;
cursor: pointer;
line-height: 10px;
}
.footer {
display: flex;
justify-content: flex-end;
margin-top: 26px;
}
.footer button {
width: 80px;
height: 40px;
}
.footer button:nth-child(1) {
margin-right: 10px;
cursor: pointer;
}
</style>

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: 【Vue】sync修饰符