Vue:表单修饰符(.lazy/.number/.trim)

一、v-model.lazy

默认情况下,v-model 会在每次 input 事件后更新数据。也就是说在每次输入时都会改变绑定的值。

例如,在下面的代码中,每次在输入框中输入时,number都会立即改变

   {{ number }}
   <input type="text" v-model="number" />

有时候我们希望在一次输入结束后再更新数据,比如在搜索框中我们希望完整的输入后再检索,就可以使用.lazy。

例如,在下面的代码中,只有当结束这次输入时(例如失去焦点),number才会改变

{{ number }}
<input type="text" v-model.lazy="number" />

二、v-model.number

v-model.number可以将输入的值自动更改为数字。

例如,在下面的代码中,我们输入数字6,但它的类型是一个字符串

<template>
  <div class="page">
    {{ number }}
    <input type="text" v-model="number" :on-change="say()" />
  </div>
</template>

<script setup lang="ts">
import { ref } from "vue";
const number = ref();
const say = () => {
  console.log(typeof number.value);//string
};
</script>

加入.number后,输入数字会自动转化为number。

例如,在下面的代码中,我们输入数字6,它的类型是数字。

<template>
  <div class="page">
    {{ number }}
    <input type="text" v-model.number="number" :on-change="say()" />
  </div>
</template>

<script setup lang="ts">
import { ref } from "vue";
const number = ref();
const say = () => {
  console.log(typeof number.value);//number
};
</script>

需要注意的是,在使用.number修饰符时,如果我们先输入数字再输入其它字符或者先输入其它字符再输入数字,类型会是先输入的值的类型。

例如输入123aaa,类型为数字,值为123。

例如输入aaa123,类型为字符串,值为aaa123。

三、v-model.trim

它可以默认自动去除用户输入内容中两端的空格

当输入“            123456”

没有使用.trim时:

<template>
  <div class="page">
    {{ number }}
    <input type="text" v-model="number" :on-change="say()" />
  </div>
</template>

<script setup lang="ts">
import { ref } from "vue";
const number = ref();
const say = () => {
  console.log(typeof number.value); //string
  console.log(number.value); //            123456
};
</script>

使用.trim时:

<template>
  <div class="page">
    {{ number }}
    <input type="text" v-model.trim="number" :on-change="say()" />
  </div>
</template>

<script setup lang="ts">
import { ref } from "vue";
const number = ref();
const say = () => {
  console.log(typeof number.value); //string
  console.log(number.value); //123456
};
</script>

如果需要去除中间的空格,可以在输入的时候进行修改,如下所示

<template>
  <div class="page">
    {{ number }}
    <input type="text" @input="onInputChange" />
  </div>
</template>
<script setup lang="ts">
import { ref } from "vue";
const number = ref("");
const onInputChange = (event: Event) => {
  const input = event.target as HTMLInputElement;
  let value = input.value;
  // 去除中间的空格
  number.value = value.replace(/[\s]+/g, "");
  // 更新原始数据时去除两端空格
  number.value = number.value.trim();
  console.log(number.value);
};
</script>

  • 13
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值