美文网首页
理解.sync 的用法

理解.sync 的用法

作者: AuraAura | 来源:发表于2021-09-18 17:05 被阅读0次

Vue 中规定:

  • 组件不能修改 props 外部数据
  • $emit可以触发发事件,并传参
  • $event可以获取$emit 的参数

案例

<template>
  <div id="app">
    {{ data }}
    <Child :data.sync="data" />
    <Child :data="data" @update:data="data = $event" />
  </div>
</template>

<script>
<template>
  <div id="app">
    {{ data }}
    <Child :data.sync="data" />
    <!-- <Child :data="data" @update:data="data = $event" /> -->
  </div>
</template>

<script>
import Child from "./components/Child.vue";
export default {
  name: "App",
  components: {
    Child,//注册子组件
  },
  data() {
    return {
      data: 2,
    };
  },
};
</script>

Child 组件中不能直接修改从 props 接收外部数据 data,先把 data 存在 Child 组件数据n中,当 Child 组件需要修改 data 时,必须利用$emit触发父组件自身update:data方法修改data$emit 在触发事件时将更新的 n 作为参数传回,在父组件中利用$event 接收该参数更新到 data,从而同时完成子组件父组件 data 的更新
Child.vue

<template>
  <div>
    {{ n }}
    <button @click="updateData">更新从父组件传过来n</button>
  </div>
</template>
<script>
export default {
  // 子组件要使用父组件的数据,只需要一步,在 props中接收父组件的属性
  props: ["data"], // 接收父组件给子组件定义的属性 用props
  data() {
    return {
      n: this.data,
    };
  },
  methods: {
    updateData: function () {
      this.$emit("update:data", ++this.n); //通知父组件更新值
    },
  },
};
</script>

Vue 为了方便起见,将<Child :data="data" @update:data="data = $event" />提供一个缩写,即 .sync 修饰符,<Child :data.sync="data" />

.sync 修饰符

注意带有 .sync 修饰符的 v-bind 不能和表达式一起使用 (例如 :data.sync=”data++”会报错,只能传变量名称不能传表达式,v-model 也是)。

相关文章

网友评论

      本文标题:理解.sync 的用法

      本文链接:https://www.haomeiwen.com/subject/xglygltx.html