Vue 自定义指令

全局注册Vue的自定义指令:

1. 全局注册钩子函数

html 部分使用:

<div v-demo:foo.a.b="message"></div> 
<!-- 
demo 是函数名
冒号后的 foo 是指定的参数,可以是动态的
a 和 b 是 修饰符
message 是指令表达式
-->

js 部分:

Vue.directive('demo',{    
	bind: function(el, binding, vnode){ // el,binding,vnode 是钩子函数的参数
        // .. do something
	}
})

new Vue({
    data(){
        return {
            message:'hello!'
        }
    }
}).$mount('#app')

钩子函数的参数:

  • el: 指的是指令绑定的元素,即上面的 div
  • binding:指令的属性对象,对象里包括:
    - name: 指令名,不包含 v-前缀, 即上面的 demo
    - arg: 指令参数,可以写成[arg]动态使用,即上面的 foo
    - modifiers: 指令的修饰符,只要加了修饰符,都显示为true, 上面例子即:{a:true, b: true}
    - expression: 指令表达式, 即上面的 message
    - value: 指令表达式的值,是指令绑定的值, 即上面的"hello!"
  • vnode: 虚拟节点

由于 binding 是一个对象,binding 中的所有参数的值都可以通过 (binding.参数名)获取,以用来设置指令。

2. 实例:自定义一个指令 limit, 限制元素内文本长度, 并且可以使用修饰符 upper 将文本改成大写

Vue.directive('limit', function (el, binding) {
    // 获取元素内文本内容
        let str = el.innerHTML; 
    // 文本改成大写
        if (binding.modifiers.upper){  // 只要添加了upper修饰符,data.modifiers.upper的值就是 true
            str = str.toUpperCase()
        }
   // 限制文本长度
        if (str.length > binding.value){
            el.innerHTML = str.substring(0,binding.value) + '...'
        }
    });

html中使用:

<div v-limit:up.upper="length">{{words}}</div>

Vue中数据:

new Vue({
    data(){
        return {
            words: 'asdfadsgdfshdfshghghh',
            length: 10
        }
    }
}).$mount('#app')

页面输出结果如下:

ASDFADSGDF…

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值