ToB企服应用市场:ToB评测及商务社交产业平台

标题: 【Vue】sync修饰符 [打印本页]

作者: 河曲智叟    时间: 2024-6-21 13:13
标题: 【Vue】sync修饰符
一、介绍

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

二、语法

父组件
  1. // .sync写法
  2. <BaseDialog :visible.sync="isShow" />
  3. --------------------------------------
  4. // 完整写法
  5. <BaseDialog
  6.   :visible="isShow"
  7.   @update:visible="isShow = $event"
  8. />
复制代码
子组件
  1. props: {
  2.   visible: Boolean
  3. },
  4. this.$emit('update:visible', false)
复制代码

三、代码示例

App.vue
  1. <template>
  2.   <div class="app">
  3.     <button @click="openDialog">退出按钮</button>
  4.     <!-- isShow.sync  => :isShow="isShow" @update:isShow="isShow=$event" -->
  5.     <BaseDialog :isShow.sync="isShow"></BaseDialog>
  6.   </div>
  7. </template>
  8. <script>
  9. import BaseDialog from './components/BaseDialog.vue'
  10. export default {
  11.   data() {
  12.     return {
  13.       isShow: false,
  14.     }
  15.   },
  16.   methods: {
  17.     openDialog() {
  18.       this.isShow = true
  19.       // console.log(document.querySelectorAll('.box'));
  20.     },
  21.   },
  22.   components: {
  23.     BaseDialog,
  24.   },
  25. }
  26. </script>
  27. <style>
  28. </style>
复制代码
BaseDialog.vue
  1. <template>
  2.   <div class="base-dialog-wrap" v-show="isShow">
  3.     <div class="base-dialog">
  4.       <div class="title">
  5.         <h3>温馨提示:</h3>
  6.         <button class="close" @click="closeDialog">x</button>
  7.       </div>
  8.       <div class="content">
  9.         <p>你确认要退出本系统么?</p>
  10.       </div>
  11.       <div class="footer">
  12.         <button>确认</button>
  13.         <button>取消</button>
  14.       </div>
  15.     </div>
  16.   </div>
  17. </template>
  18. <script>
  19. export default {
  20.   props: {
  21.     isShow: Boolean,
  22.   },
  23.   methods:{
  24.     closeDialog(){
  25.       this.$emit('update:isShow',false)
  26.     }
  27.   }
  28. }
  29. </script>
  30. <style scoped>
  31. .base-dialog-wrap {
  32.   width: 300px;
  33.   height: 200px;
  34.   box-shadow: 2px 2px 2px 2px #ccc;
  35.   position: fixed;
  36.   left: 50%;
  37.   top: 50%;
  38.   transform: translate(-50%, -50%);
  39.   padding: 0 10px;
  40. }
  41. .base-dialog .title {
  42.   display: flex;
  43.   justify-content: space-between;
  44.   align-items: center;
  45.   border-bottom: 2px solid #000;
  46. }
  47. .base-dialog .content {
  48.   margin-top: 38px;
  49. }
  50. .base-dialog .title .close {
  51.   width: 20px;
  52.   height: 20px;
  53.   cursor: pointer;
  54.   line-height: 10px;
  55. }
  56. .footer {
  57.   display: flex;
  58.   justify-content: flex-end;
  59.   margin-top: 26px;
  60. }
  61. .footer button {
  62.   width: 80px;
  63.   height: 40px;
  64. }
  65. .footer button:nth-child(1) {
  66.   margin-right: 10px;
  67.   cursor: pointer;
  68. }
  69. </style>
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4