.sync修饰符

官方对于.sync的说法

我们可能需要对一个 prop 进行“双向绑定”。不幸的是,真正的双向绑定会带来维护上的问题,因为子组件可以变更父组件,且在父组件和子组件两侧都没有明显的变更来源。

作用

.sync修饰符可以实现子组件与父组件的双向绑定,并且可以实现子组件同步修改父组件的值。
简单来说就是:用于实现父子组件数据的双向绑定 (语法糖)

// 父组件
<template>
  <div class="context">
  		<div>我的{{price}}</div>
    	<zi :price.sync="price"/>
		
		//<zi :price="total" v-on:update:price="total = $event" />
    	//父组件这一大段代码太麻烦了,vue把它封装成了一个修饰符
    	//传给子组件一个money值,v-on是监听子组件的update:money事件,$event获取子组件事件的结果
  </div>
</template>

<script>
import zi from "./zi.vue";
export default {
  data() {
    return { 
    	price: 10000
    };
  },
  components: { zi: zi}
};
</script>

<style lang="less">
.context{
  border: 2px solid #f60;
  padding: 20px;
}
</style>
//子组件
<template>
  <div class="zi">
    <div>{{price}}</div>
    <button @click="$emit('update:price', price - 100)">花钱</button>
  </div>
</template>

<script>
export default {
  props: ["price"]
};
</script>
<style lang="less">
.zi{
  border: 2px solid #abcdef;
}
</style>
这样子组件修改父组件同样接受并更新。
这里我们必须在事件执行名称前加上 'update:' 的前缀才能正确触发事件。
注意带有 .sync 修饰符的 v-bind 不能和表达式一起使用 (例如 v-bind:title.sync=”doc.title + ‘!’” 是无效的)。取而代之的是,你只能提供你想要绑定的 property 名,类似 v-model。(官网摘抄)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值