关于: .sync修饰符

.sync修饰符用于简化父组件与子组件之间双向绑定的语法。通过使用.sync修饰符,可以将子组件中对父组件属性的修改直接同步到父组件中,而无需显式地在子组件中触发事件来更新父组件的属性。.sync修饰符的作用是使双向绑定在父子组件之间更加直观和简洁。

父组件:

bash 复制代码
<progressVue :visible.sync="show" :type="operationType" />

一、子组件:通过js 改变传值的处理

bash 复制代码
props: {
    visible: {
      type: Boolean,
      default: false
    },
 }
computed: {
   show: { // 重新计算属性--
    get() {
      return this.visible
    },
    set(val) { // 注意更新的是 props 的值
      this.$emit('update:visible', val)
    }
  },
},

// 操作 this.show = false 
// 那么 visible 更新值也是 false
参考: https://vuejs.zcopy.site/v2/guide/components-custom-events#sync-%E4%BF%AE%E9%A5%B0%E7%AC%A6

二、子组件:直接输入改变传值

bash 复制代码
// 父组件
<ChildComponent :value.sync="inputValue" />
// 子组件
<input :value="value" @input="$emit('update:value', $event.target.value)" />

proxy实现双向绑定

在JavaScript中,双向绑定通常是通过观察和同步数据模型与视图的变化来实现的。如果你想要实现一个简单的双向绑定,你可以创建一个简单的代理(proxy)来包装这种行为。

以下是一个简单的例子,展示了如何使用Proxy来实现双向绑定:

bash 复制代码
function bind(target, callback) {
  const handler = {
    get(obj, prop) {
      return obj[prop];
    },
    set(obj, prop, value) {
      obj[prop] = value;
      callback();
      return true;
    }
  };
 
  return new Proxy(target, handler);
}
 
// 使用示例
const data = {
  text: ''
};
 
const proxyData = bind(data, () => {
  console.log('数据已更新:', proxyData.text);
});
 
// 当设置proxyData的属性时,callback函数会被调用,输出更新的值
proxyData.text = 'Hello, world!'; // 输出: 数据已更新: Hello, world!
 
// 你也可以使用这个proxyData来绑定到视图,每次text属性更新时,视图也会自动更新
相关推荐
开心工作室_kaic17 分钟前
ssm161基于web的资源共享平台的共享与开发+jsp(论文+源码)_kaic
java·开发语言·前端
刚刚好ā17 分钟前
js作用域超全介绍--全局作用域、局部作用、块级作用域
前端·javascript·vue.js·vue
沉默璇年2 小时前
react中useMemo的使用场景
前端·react.js·前端框架
yqcoder2 小时前
reactflow 中 useNodesState 模块作用
开发语言·前端·javascript
2401_882727572 小时前
BY组态-低代码web可视化组件
前端·后端·物联网·低代码·数学建模·前端框架
SoaringHeart2 小时前
Flutter进阶:基于 MLKit 的 OCR 文字识别
前端·flutter
会发光的猪。2 小时前
css使用弹性盒,让每个子元素平均等分父元素的4/1大小
前端·javascript·vue.js
天下代码客3 小时前
【vue】vue中.sync修饰符如何使用--详细代码对比
前端·javascript·vue.js
猫爪笔记3 小时前
前端:HTML (学习笔记)【1】
前端·笔记·学习·html
前端李易安3 小时前
Webpack 热更新(HMR)详解:原理与实现
前端·webpack·node.js