在组件上面使用v-model

父子组件之间的通信一般也不用v-model,但是今天在看文档的时候看到了这个,随手记录一下:
v-model是下面代码的语法糖

<input :value="text" @input="text=$event.target.value">

父子组件通信的时候,在父组件上面使用v-model

<template>
  <div id="con">
    <p>{{ text }}</p>
    <child v-model="text"></child>
  </div>
</template>

<script>
import child from "./aa.vue";
export default {
  name: "bb",
  props: {},
  components: { child },
  data: function () {
    return {
      text: "我是父组件",
    };
  },
  created() {},
  methods: {},
  computed: {},
};
</script>

<style lang="less" scoped></style>

子组件:

<template>
  <div class="child">
    <p>{{ msg }}</p>
    <el-button @click="btnClick">点击改变父组件内容</el-button>
  </div>
</template>

<script>
export default {
  model: {
    prop: "msg",
    event: "respond",
  },
  props: {
    msg: {
      type: String,
    },
  },
  methods: {
    btnClick() {
      this.$emit("respond", "我是子组件");
    },
  },
};
</script>

<style lang="less" scoped></style>

注意:子组件中有个model,它是v-model通信至关重要的条件,他有两个属性,prop是传过来的属性,event是子组件要发射的事件名称,一个组件上的 v-model 会把 value 用作 prop 且把 input 用作 event。这样就可以实现父子组件之间的通信,子组件可以拿到父组件传过来的值,子组件也可以更改值。

posted @ 2021-12-06 15:27  最爱宋人头  阅读(632)  评论(0编辑  收藏  举报