v-model与.sync组件通信

父组件:

复制代码
<template>
  <div class="hello">
    <h1>{{ name }}</h1>
    <test v-model="name" />
    <h1>{{ isShow }}</h1>
    <sonSync ref="test" :refbool.sync="isShow"></sonSync>
  </div>
</template>

<script>
import Test from "./son";
import SonSync from "./sonSync";
export default {
  name: "HelloWorld",
  components: {
    Test,
    SonSync,
  },
  data() {
    return {
      isShow: true,
      name: 111,
    };
  },
};
</script>
<style scoped>
</style>
复制代码

 

1.v-model(vue2.0)

v-model 语法糖本质是 
<test v-model="name" />
<test :value="name" @input="onInput"/>

可以很明显得看出来可以拿组件去接收props和回调emit

子组件接收和回调:

复制代码
<template>
    <div @click="cli">{{ msg }}</div>
</template>

<script>
export default {
  props: {
    value: Number,
  },
  data() {
    return {
      msg: this.value,
    };
  },
  methods: {
    cli: function () {
      this.msg += 1;
      this.$emit("input", this.msg);
    },
  },
};
</script>
复制代码

 

2. .sync(vue2.0)

.sync 的语法糖本质是 
<sonSync  :refbool.sync="isShow"></sonSync>

<sonSync :refbool="val" @update:refbool="value => val = value"></sonSync>

可以很明显得看出来可以拿组件去接收props和回调emit

子组件接收和回调:

复制代码
<template>
  <button type="default" @click="ok">子组件点击</button>
</template>

<script>
export default {
  props: {
    refbool: {
      type: Boolean,
      default: false,
    },
  },
  data() {
    return {};
  },
  methods: {
    ok() {
      this.$emit("update:refbool", !this.refbool);
    },
  },
};
</script>
复制代码

.sync对比v-model的优势是可以用多个属性,而不像v-model只有一个value

 

3.v-model (vue3.0)

在vue3.0中不可以使用.sync了,必须使用v-model了。

但是使用v-model又跟2.0又不太一样

复制代码
v-model(3.0)的语法糖本质是 
<ChildComponent v-model="pageTitle" />
<!-- 简写: -->
<ChildComponent
  :modelValue="pageTitle"
  @update:modelValue="pageTitle = $event"
/>
若要多个,可以自定义名称:
<ChildComponent v-model:title="pageTitle" v-model:content="pageContent" />
<!-- 简写: -->
<ChildComponent
  :title="pageTitle"
  @update:title="pageTitle = $event"
  :content="pageContent"
  @update:content="pageContent = $event"
/>
复制代码

 

父组件还是一样,用v-model

子组件接收和回调:

复制代码
<template>
  <input type="text" :value="modelValue" @input="textInput" />
</template>

<script>
export default {
  props: {
    modelValue: String,
    meta: Object,
  },
  methods: {
    textInput: function (e) {
      this.$emit("update:modelValue", e.target.value);
    },
  },
};
</script>
复制代码

在3.0中组件上 v-model 用法已更改

  • 自定义v-model时,prop和事件默认名称已更改:
    prop: value -> modelValue
    event: input -> update:modelValue
  • .sync和组件的model选项已移除,可用v-model作为替代
  • 现在可以在同一个组件上使用多个 v-model 进行双向绑定;
  • 现在可以自定义 v-model 修饰符
    比如自定义v-model.capitalize,绑定为字符串第一个字母的大写

posted on   sss大辉  阅读(116)  评论(0编辑  收藏  举报

编辑推荐:
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
阅读排行:
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

导航

统计

点击右上角即可分享
微信分享提示