首页 > 其他分享 >vue的.sync修饰符用法及原理详解

vue的.sync修饰符用法及原理详解

时间:2022-11-28 15:36:26浏览次数:74  
标签:vue name 修饰符 sync child 组件

vue .sync的历史
vue .sync 修饰符最初存在于 vue 1.0 版本里,但是在 2.0 中被移除了。但是在 2.0 发布之后的实际应用中,vue 官方发现 .sync 还是有其适用之处,比如在开发可复用的组件库时。开发者需要做的只是让子组件改变父组件状态的代码更容易被区分。从 2.3.0 起官方重新引入了 .sync 修饰符,但是这次它只是作为一个编译时的语法糖存在。它会被扩展为一个自动更新父组件属性的 v-on 监听器。


vue 修饰符sync的功能是:当一个子组件改变了一个 prop 的值时,这个变化也会同步到父组件中所绑定。如果我们不用.sync,我们想做上面的那个弹窗功能,我们也可以props传初始值,然后事件监听,实现起来也不算复杂。这里用sync实现,只是给大家提供一个思路,让其明白他的实现原理,可能有其它复杂的功能适用sync。

假如父组件传给子组件的值,子组件接受之后,想要改变父组件传过来的值,就可以使用sync

father.vue

<template>
<div class="LightEnergy">
   <p>这是父组件的内容 :{{name}}</p>
   <p style="height:60px;margin-top:60px">
    <child :name.sync=name></child>
   </p>
</div>
</template>
 
<script>
import child from './components/child.vue'
export default {
  name: "LightEnergy",
  data() {
    return {
      name:'hello',
      options: options
    };
  },
  components: {
    child
  },
  methods: {
  },
  mounted() {
  },
  destroyed(){
    clearInterval(t)
  }
};

child.vue

<template>
  <div id="childCon">
    <el-row>
        子组件接受父组件的值{{name}}
      <el-button type="success" @click="upCon">成功按钮</el-button>
    </el-row>
  </div>
</template>
 
<script>
export default {
  name: "childCon",
  data() {
    return {};
  },
  props: ['name'],
  methods: {
      upCon(){
          this.$emit('update:name', '新的name值')
      }
  }
};
</script>
 
<style scoped>
</style>

vue .sync修饰符的使用详解​www.jb51.net/article/142099.htm

2.双向数据绑定,子组件改变的时候,父组件也在改变

father.vue

<template>
  <div class="hello">
    父级的内容<input type="text" v-model="wrd">
    <br /><br />
    <box :word.sync="wrd"></box>
  </div>
</template>
<script>
import box from "./components/child"; //引入box子组件
export default {
  name: "HelloWorld",
  data() {
    return {
      wrd: ""
    };
  },
  components: {
    box
  }
};
</script>
<style scoped></style>

child.vue

<template>
  <div class="hello">
    <div class="ipt">
     子级的内容 <input type="text" v-model="str">
    </div>
    <h2>{{ word }}</h2>
  </div>
</template>
<script>
export default {
  name: "box",
  data() {
    return {
      str: ""
    };
  },
  props:['word'],
  watch: {
    str: function(newValue, oldValue) {
        console.log(newValue)
        console.log(oldValue)
      //每当str的值改变则发送事件update:word , 并且把值传过去
      this.$emit("update:word", newValue);
    }
  }
};
</script>

参考文档:https://blog.csdn.net/weixin_58206976/article/details/121318208



标签:vue,name,修饰符,sync,child,组件
From: https://www.cnblogs.com/mmzuo-798/p/16932292.html

相关文章

  • Electron-vue 使用Element-UI el-table 不显示
    在Electron-Vue中引入Element-UI,发现el-table显示空白,查资料发现只需要在.electron-vue/webpack.renderer.config里面白名单模块加上 'element-ui'  //修改前......
  • Vue3+Vite项目中 使用WindiCSS.
    之前工作有了解过根据类名来写元素的样式,一听就发出疑问:这样写项目可读性恐怕不是很好吧。。。  之后来到杭州工作后,开始使用WindiCSS后发现真香!!! 由于近期所写的项......
  • vue文件夹上传这么做
    ​ 这里只写后端的代码,基本的思想就是,前端将文件分片,然后每次访问上传接口的时候,向后端传入参数:当前为第几块文件,和分片总数下面直接贴代码吧,一些难懂的我大部分都加上......
  • Vue踩坑日记一
    Vue踩坑日记一:ViewUI添加单击事件不生效问题:使用IviewMenu过程中,出现其子项MenuItem添加@click事件无法生效的问题。解决办法:使用@click.native原生点击事件......
  • 【Vuejs】114-从头开始学习Vuex
    一、前言当我们的应用遇到多个组件共享状态时,会需要多个组件依赖于同一状态抑或是来自不同视图的行为需要变更同一状态。以前的解决办法:a.将数据以及操作数据的行为都定义在......
  • Vue获取到 Promise {<pending>} 数的格式解析方法
    Promise.all([request({url:urlPrefix_custom,method:'get',params:querys})]).then((res)=>{console.log("---......
  • vue大文件上传失败
    ​ 前言文件上传是一个老生常谈的话题了,在文件相对比较小的情况下,可以直接把文件转化为字节流上传到服务器,但在文件比较大的情况下,用普通的方式进行上传,这可不是一个好......
  • # vue 实现文件切上传
    vue实现文件切上传在实际开发项目过程中有时候需要上传比较大的文件,然后呢,上传的时候相对来说就会慢一些,so,后台可能会要求前端进行文件切片上传,很简单哈,就是把比如说1个G的......
  • Vue富文本编辑器(vue-quill-editor)使用✔✔
    最近工作中需求使用一款富文本编辑器,最终选择了vue-quill-editor,之所以选择vue-quill-editor,是看上了它的轻量以及外观简洁的优势。打开官方文档,直接上手配置,各种报错,踩了......
  • vue element 样式不生效问题
    1.第一次用element-ui的select框发现怎么改样式都不生效,尝试了各种方式,总显示默认样式;获取了dom元素发现弹框是插在了body元素内,并不是对应的select选择下翻了翻文档,发......