.sync修饰符

267 阅读1分钟

.sync 修饰符 通过将 props 和$emit 结合起来就可以实现父子组件的双向通信。

<div id="app">
  <div>{{bar}}</div>
  <my-comp :foo.sync="bar"></my-comp>
  <!-- <my-comp :foo="bar" @update:foo="val => bar = val"></my-comp> -->
</div>

<script>
  new Vue({
    el: "#app",
    data: { bar: 0 }
  });

  Vue.component("my-comp", {
    template: '<h3>{{foo}}</h3><div @click="increment">点我+1</div>',
    data: function() {
      return { copyFoo: this.foo };
    },
    props: ["foo"],
    methods: {
      increment: function() {
        this.$emit("update:foo", ++this.copyFoo);
      }
    }
  });
</script>

子组件通过“update:foo”事件将讲一个值传给父组件,父组件接收后再将这个值赋给变量“foo”,接着在通过 props 将这个“foo”,子组件又接收到了新值。就实现了双向通信。


<comp :foo="bar" @update:foo="val => bar = val"></comp>

在使用了.sync 后,被简化为

<my-comp :foo.sync="bar"></my-comp>

可以看出 sync 就是一个语法糖,简化了父子组件双向通信的写法。