关于写vue时候发现的那些坑(三)

687 阅读3分钟

这篇来讲一下修饰符,也算是比较细节的一些地方,用得恰当能省下不少函数封装代码。

pexels-tima-miroshnichenko-5380664.jpg

v-model的三个修饰符

1. v-model.number

// vue
<template>
  <div>
    <input type="text" v-model="num"> <span>数字{{num}}</span>
  </div>
</template>

<script>
export default {
   data () {
     return {
       num: 0,
     }
   }
}
</script>

<style>

</style>

如图所示,众所周知,这是很基础很常见的输入框,现在他的初始值是0,旁边的span也会是0。那现在我们去掉0,改成任意的字符或者在0后面加上1,“01”,那么我们会发现span和input都变成了输入的字符或者"01"。我们的需求是限制用户输入只能为数字,方法多种,但多数都需要函数,如果我们改成下面这种,那就省事很多。话不多说,贴图,往你脸上贴那种。

// vue
<template>
  <div>
    <input type="text" v-model.number="num"> <span>数字{{num}}</span>
  </div>
</template>

<script>
export default {
   data () {
     return {
       num: 0,
     }
   }
}
</script>

<style>

</style>

呐,在v-model后面加上.number就可以限制输入的类型必须为数字了。本系列第一篇文章当中,也有类似的需求,咱使用el-input-number组件做了些小花招。那个和这里区别就是,这里输入内容就会去判断类型,el-input-number组件则是在blur事件后判断,也就是input失去焦点的时候。但这不是说,el-input-number那种方式就不好,但就小数点精确后两位这种场景,还是用el-input-number更香。 顺便附上前面两章地址。 关于写vue时候发现的那些坑(一)关于写vue时候发现的那些坑(二) image.png

2. v-mdel.trim

同样是input输入框,现在有个用户需求,就是用户在输入框输入查询条件的时候要去除前后空格。比方说在商品列表,用户输入了商品名称,但是不巧,人家是在和好基友聊天的时候,好基友给推荐的某款耳机,把名字发给他就是不发地址。他也懒的敲,然后直接复制了名字,在商品列表查询。也不知道微信改了啥,好家伙,复制出来的名称前面后面都有空格,虽然商品也查出来了,但是输入框里面这名字没贴边,好家伙,强迫症难受。那么,作为前端的在座各位,该怎么做?哎,贴图!呸,贴代码!

// vue
<template>
  <div>
    <input type="text" v-model.trim="name"> <span>商品名称{{name}}</span>
  </div>
</template>

<script>
export default {
   data () {
     return {
       name: '',
     }
   }
}
</script>

<style>

</style>

加了.trim修饰符,就可以实现去除前后空格的效果,那么有人会说了,那我中间加个空格咧,那不行。只针对前后空格,中间空格其实相当于内容了。

3. v-model.lazy

哎,这是用来干啥的,我们发现每次在input输入内容,vue都会实时更新,这点可以用vue-devtools工具看到实时的数据变化,一改就更新。就是这工具。

devtools.png

那么假如团队来个需求,要你做像百度那样,输入就马上发送请求获取数据那种,但是服务器负载能力又有限,又或者团队希望,用户输完在发生请求,且如果第二次输入的内容和第一次一致,则不发生请求。用户场景,举个例子,用户想买衣服,比如碎花裙,输入框只会在碎花裙输完再去获取请求,然后用户又输入了一次碎花裙,此时不发生请求。只会在内容变化完成之后才会发送请求。那么此时就是.lazy出场了。

// vue
<template>
  <div>
    <input type="text" v-model.lazy="name"> <span>商品名称{{name}}</span>
  </div>
</template>

<script>
export default {
   data () {
     return {
       name: '',
     }
   }
}
</script>

<style>

</style>

代码如上所示,.lazy不会马上更新数据,它只会在change事件之后在更新。第一次name的初始值是空串,所以当你输入碎花裙,则发送请求,然后第二次在输入碎花裙,则不发生请求。

以上,是v-model的修饰符,希望对你有用!