react & vue & angular

组件上的v-model、model与sync(包括vue2、vu

2022-03-11  本文已影响0人  darkTi

首先它们都是来表示双向绑定一个props值的,我们用这三种写法来演示同一功能,表现一模一样

用sync

1、父组件中对需要双向绑定的props用sync修饰符;
2、子组件触发update:props的名字
3、把props的名字由money改成value完全不受影响;但是触发的事件必须是update:props的名字这种形式!

//父组件
<X :money.sync="num"></X> //区别点
 data() {
    return {
      num: 500
    };
  },
//子组件
<template>
  <div>
    <div class="xx">余额:{{ money }}</div> <!--区别点-->
    <button @click="changeMoney(100)">存100</button>
    <button @click="changeMoney(-100)">取100</button>
  </div>
</template>

<script>
export default {
  props: {
    money: { //区别点
      type: Number
    }
  },
  methods: {
    changeMoney(data) {
      this.$emit("update:money", this.money + data); //区别点
    }
  }
};
</script>

用v-model

1、父组件用v-model
2、子组件需要触发input事件;
3、props的名字必须是value,且触发的事件必须是input,换成其他的达咩~

//父组件
<X v-model="num"></X> <!--区别点-->
 data() {
    return {
      num: 500
    };
  },
<template>
  <div>
    <div class="xx">余额:{{ value }}</div>  //区别点
    <button @click="changeMoney(100)">存100</button>
    <button @click="changeMoney(-100)">取100</button>
  </div>
</template>

<script>
export default {
  props: {
    value: { //区别点
      type: Number
    }
  },
  methods: {
    changeMoney(data) {
      this.$emit('input', this.value + data)  //区别点
    }
  }
};
</script>

子组件中用model

1、它算是v-model的升级版;
2、父组件还是用v-model
3、子组件中添加model属性,里面指定prop和event的名字;
4、注意啦!用了model,虽然父组件上还是v-model,但是props和event的名字就不用固定是value和input了,你完全可以自定义它们两个的名字了!

//父组件
<X v-model="num"></X> 
 data() {
    return {
      num: 500
    };
  },
<template>
  <div>
    <div class="xx">余额:{{ money }}</div>
    <button @click="changeMoney(100)">存100</button>
    <button @click="changeMoney(-100)">取100</button>
  </div>
</template>

<script>
export default {
    model: {  //区别点
        prop: 'money',
        event: 'emit-money'
    },
  props: {
    money: {
      type: Number
    }
  },
  methods: {
    changeMoney(data) {
      this.$emit("emit-money", this.money + data);  //区别点
    }
  }
};
</script>

总结

image.png

2.x与3.x中组件上v-model的不同

vue3-v-model.png
上一篇下一篇

猜你喜欢

热点阅读