如何简单理解 .sync修饰符

  1. 父组件传递数据时,子组件用props接受 父组件里面有事件 可以改变 自身data里面的数据,然后通过props传递从而改变子组件的显示数据。
  2. 但同时 子组件里面也可能有事件可以更新props传递过来的数据,不需要通过子组件的this.$emit(‘自定义事件名称’) 自定义事件来让父组件绑定@ 事件 从而改变 父组件里面的data数据。

这样会比较麻烦,因为这样的话 子组件派发的事件,要让父组件执行, .sync 修饰符就解决了 ,父组件不需要定义事件就能实现类似于 v-modle 这样的效果, 子组件也可以更新父组件里面的数据。

通过一个简单的案例:

思路:父组件的状态,通过props传递,父组件本身可以改变data里面的数据, 子组件也可以也有事件可以改变父组件里面的传过来的数据,其实的话是一种语法糖

父组件

<template>
  <div id="app">
    <myComponent :show.sync='valueChild' :data.sync='msg' style="padding: 50px 50px 30px 5px;border:1px solid red;margin-bottom: 10px;"></myComponent>
 其实是一种语法糖:
会被扩展为: <myComponent :show='valueChild' @update:show="val=>valueChild=val"></myComponent>

     <button @click="changeValue">toggle</button>
  </div>
  
</template>

<script>
import myComponent from './components/myComponent'

export default {
  name: 'app',
  components: {
    myComponent
  },
  data(){
        return{
            valueChild:true,
            msg:"xxx"
        }
    },
  methods:{
     changeValue(){
            this.valueChild = !this.valueChild
        },
       
  }
}

</script>

<style>

</style>

子组件 

<template>
  <div v-if="show">
                    <p>默认初始值是{{show}},所以是显示的</p>
                    <button @click.stop="closeDiv">关闭</button>
     <h1>{{data}}</h1>
                 </div>
</template>

<script>
export default {
  name: 'myComponent',
  data(){
    return {
    }
  },
   props:['show','data'],
  methods:{
     closeDiv() {
          this.$emit('update:show',false); //触发 input 事件,并传入新值
        }
  }
}
</script>


<style scoped>

</style>

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值