text长度限制 由Vue实现限制文本框输入长度引发的思考 input

2020-06-05 18:44:32 类别:奇闻 来源:飘花资讯

过滤器

针对这类限制输入的需求,很容易想到的是使用Vue过滤器,如:

    Vue.filter('sliceString', function(str, start, length) {

        return str.slice(start, length);

    });

    // 组件模板中使用如下:

   

但是需要注意的是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);

            }

        }

    }

在模板中使用方式如下:

   

这种方式比较直接,而且不需要考虑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);

                }

            }

        }

    }

在模板中使用方式如下:

   

除了例子中可以限制输入长度,还可以实现很多需求,如过滤屏蔽某些输入,对某些输入数据做验证等等,而且实现方式也多种多样,各有千秋,可以根据需求衡量,选择。