组件自定义事件之 .sync 修饰符
组件自定义事件之 .sync 修饰符
- 在没有 .sync 修饰符之前我们要对一个 prop 进行双向绑定。
可直接复制以下代码查看
<!--父组件模板-->
<div id="app">
{{father}}
<button @click="btnClick">父组件按钮</button>
<son :son.sync="father"></son>
</div>
<!--子组件模板-->
<template id="son">
<div>
{{son}}
<button @click="btnClick">子组件按钮</button>
</div>
</template>
<script src="https://cdn.jsdelivr.net/npm/vue@2.5.16/dist/vue.js"></script>
<script>
// 1.子组件
const son = {
template: '#son',
props: {
son: String
},
methods: {
btnClick(item) {
// 发射事件: 自定义事件
this.$emit('update:son', 'hello World')
}
}
}
// 2.父组件
const app = new Vue({
el: '#app',
data: {
father: 'lazy'
},
// 注册组件
components: {
son
},
methods: {
btnClick() {
this.father = '老司机';
}
}
})
</script>
- 这里我们将父组件的 father 变量和 prop 的 son 进行绑定
- 然后在子组件放射自定义事件来改变父组件 father 的值
- 为了方便起见,我们可以将子组件进行一个缩写
- 注意事件名要以 update: 加上需要绑定的 prop字段名 的字符串
<son :son.sync="father"></son>
-
son 代表 prop 绑定的变量及发射自定义事件 update: 后跟的字符串
-
father 代表 父组件绑定给子组件的变量
-
这样我们无论在父组件还是子组件都可以改变这一对“双向绑定”的变量
一个对象同时设置多个 prop
<!--父组件模板-->
<div id="app">
{{father.son}}
<button @click="btnClick">父组件按钮</button>
<son v-bind.sync="father"></son>
</div>
<!--子组件模板-->
<template id="son">
<div>
{{son}}
{{son2}}
<button @click="btnClick">子组件按钮</button>
</div>
</template>
<script src="https://cdn.jsdelivr.net/npm/vue@2.5.16/dist/vue.js"></script>
<script>
// 1.子组件
const son = {
template: '#son',
props: {
son: String,
son2: String
},
methods: {
btnClick(item) {
// 发射事件: 自定义事件
this.$emit('update:son', 'hello World')
this.$emit('update:son2', 'hello World2')
}
}
}
// 2.父组件
const app = new Vue({
el: '#app',
data: {
father: {
son: 'son1',
son2: 'son2'
}
},
// 注册组件
components: {
son
},
methods: {
btnClick() {
this.father.son = '老司机';
this.father.son2 = '老司机2';
}
}
})
</script>
- 这样会把 father 对象中的每一个 property (如 son) 都作为一个独立的 prop 传进去,然后各自添加用于更新的 v-on 监听器。
注意 v-bind 不能用语法tangibl糖 : 代替,会语法报错
将 v-bind.sync 用在一个字面量的对象上,例如 v-bind.sync=”{ title: doc.title }”,是无法正常工作的,因为在解析一个像这样的复杂表达式的时候,有很多边缘情况需要考虑。
本文来自博客园,作者:懒惰ing,转载请注明原文链接:https://www.cnblogs.com/landuo629/p/14295104.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?