v-model和ref获取数据的不同之处

在vue项目开发中,经常会遇到表单数据的处理,例如获取输入框的数据 

<template>
  <div class="about">
    <form @submit.prevent="submitInput">
      <div>
        <label for="age"></label>
        <input id="age" type="number" v-model="inputValue" ref="inputRef" />
      </div>
      <button>submit</button>
    </form>
  </div>
</template>
<script>
export default {
  data() {
    return {
      inputValue: null,
    };
  },
  methods: {
    submitInput() {
      console.log(this.inputValue);
      console.log(this.$refs.inputRef.value);
    },
  },
};
</script>

我有一个输入框,type值为number,我现在分别使用v-model和ref来获取输入框的数据,并打印在控制台

查看打印信息,你会发现获取的数据是一样的,但是仔细观察,两个数据的颜色不同,使用v-model绑定获取的数据是蓝色的,而ref获取的是黑色,我刚开始看到这种情况也是一脸懵逼,不知道有啥不一样,直到我对数据进行进一步处理,才恍然大悟。

<template>
  <div class="about">
    <form @submit.prevent="submitInput">
      <div>
        <label for="age"></label>
        <input id="age" type="number" v-model="inputValue" ref="inputRef" />
      </div>
      <button>submit</button>
    </form>
  </div>
</template>
<script>
export default {
  data() {
    return {
      inputValue: null,
    };
  },
  methods: {
    submitInput() {
      console.log(this.inputValue + 5);
      console.log(this.$refs.inputRef.value + 5);
    },
  },
};
</script>

在函数中,我将获取到的两个数据都+5,再次查看页面

         此时只有第一个数据正常相加,而第二个变成了字符串拼接,说明这两种方式获取的数据的类型不同,v-model获取的数据是number,而ref获取的则是一个字符串

        在vue中,如果遇到type为number的输入框,v-model会自动获取输入框中的值并将其类型从字符串转为数字,这是v-model提供的额外功能,默认情况下,如果你只使用原生javascript或者$refs,他只会提供一个默认的javascript对象,并且存储的数据类型为字符串。

        当然,除了设置type为number之外,我们也可以给vue指令添加修饰符

<template>
  <div class="about">
    <form @submit.prevent="submitInput">
      <div>
        <label for="age"></label>
        <input
          id="age"
          type="text"
          v-model.number="inputValue"
          ref="inputRef"
        />
      </div>
      <button>submit</button>
    </form>
  </div>
</template>
<script>
export default {
  data() {
    return {
      inputValue: null,
    };
  },
  methods: {
    submitInput() {
      console.log(this.inputValue + 5);
      console.log(this.$refs.inputRef.value + 5);
    },
  },
};
</script>

关于v-model的修饰符共有三种

    • .lazy ——监听 change 事件而不是 input
    • .number ——将输入的合法符串转为数字
    • .trim ——移除输入内容两端空格
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值