内容简介:由Vue实现限制文本框输入长度引发的思考
最近,公司产品线改成使用Vue主线开发,前几天有一个需求:一个标题输入文本框,需要限制其长度。google,百度搜索答案都不满意,现总结并扩展一下,希望能给Vue使用者带来一些帮助。
过滤器
针对这类限制输入的需求,很容易想到的是使用Vue过滤器,如:
Vue.filter('sliceString', function(str, start, length) { return str.slice(start, length); }); // 组件模板中使用如下: <template> <input type="text" v-model="title | sliceString 0 10"> </template>
但是需要注意的是Vue 2.x版本已经移除了内置过滤器,不支持组件内过滤器,只能全局注册,至于为什么要这样做,我并不清楚。
watch监听
除了过滤器,还有一种简便的方式,即使用 Vue
组件的 watch
属性,监听属性或表达式,比如,我们需要控制标题字数在12字以内,在某组件内定义如下代码:
data() { return { title: '', titleMaxLength: 12 }; }, watch: { title() { if (this.title.length > this.titleMaxLength) { this.title = String(this.title).slice(0, this.titleMaxLength); } } }
在模板中使用方式如下:
<input type="text" v-model="title">
这种方式比较直接,而且不需要考虑 Vue
版本,但是复用性差;如果在多组件内有共同需求,可以使用全局过滤器或者mixins方式定义。
自定义指令
要说可拓展性最强的方式,当然还是自定义指令,自定义指令提供诸多组件元素生命周期函数:
// 注册 Vue.directive('my-directive', { bind: function () {}, inserted: function () {}, update: function () {}, componentUpdated: function () {}, unbind: function () {} }); // 注册(传入一个简单的指令函数) Vue.directive('my-directive', function () { // 这里将会被 `bind` 和 `update` 调用 });
如果使用指令实现上述例子,可以使用全局注册,也可以局部组件内定义指令,这里以组件内定义为例,代码如下:
directives: { sliceString: { update(el, binding) { if (el.value.length > binding.value) { el.value = el.value.slice(0, binding.value); } } } }
在模板中使用方式如下:
<input type="text" v-sliceString="titleMaxLength" v-model="title">
除了例子中可以限制输入长度,还可以实现很多需求,如过滤屏蔽某些输入,对某些输入数据做验证等等,而且实现方式也多种多样,各有千秋,可以根据需求衡量,选择。
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- 由Vue实现限制文本框输入长度引发的思考
- c# – 如何限制MVC中文本框中的字符长度?
- memcached对key和value的限制 memcached的key最大长度和Value最大长度
- protobuf可变长度原理
- Haskell长度图说明?
- perl – 截断stdin行长度?
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
破茧成蝶:用户体验设计师的成长之路
刘津、李月 / 人民邮电出版社 / 2014-7 / 69.00
市面上已经有很多专业的用户体验书籍,但解决用户体验设计师在职场中遇到的众多现实问题的图书并不多见。本书从用户体验设计师的角度出发,系统地介绍了其职业生涯中的学习方法、思维方式、工作流程等,覆盖了用户体验设计基础知识、设计师的角色和职业困惑、工作流程、需求分析、设计规划和设计标准、项目跟进和成果检验、设计师职业修养以及需要具备的意识等,力图帮助设计师解决在项目中遇到的一些常见问题,找到自己的职业成长......一起来看看 《破茧成蝶:用户体验设计师的成长之路》 这本书的介绍吧!