Vue:自定义指令

Vue中如何自定义指令

Vue自定义指令语法

需求1.自定设置输入框为红色
需求2.自定获取输入框焦点

需求1;解决方案
<body>
    <div id='app'>
        自动设置输入框颜色<input type="text" v-color="color">
    </div>
    <script src='js/vue.js'></script>
    <script>
        //引入vue实例对象
        const vm = new Vue({
            el: '#app',
            data: {
                color: 'red'
            },
            directives: {
                color: function (element, binding) {
                    element.style.outlineColor = binding.value;
                }
            }
        })
    </script>
</body>
color函数中参数的意思:
el:指令所绑定的元素,可以用来直接操作 DOM。
binding:一个对象,包含以下 property:
  • name:指令名,不包括 v- 前缀。
  • value:指令的绑定值,例如:v-color=“color” 中,绑定值为 “red”。
  • expression:字符串形式的指令表达式。
需求2:解决方法

此时就变得有一点点复杂,不可以用第一种方法去解决。

//无效
directives: {
              focus: function (element, binding) {
                  element.focus()
       	}
 }
引出另一个问题:自定义指令函数什么时候被调用?
  • 当自定义指令与元素成功绑定的时候
  • 指令所在的模板被重新解析时

解答:当指令和元素成功绑定时,的确调用函数了,但是此时指令绑定的元素还没有插入到DOM页面中,所以element.focus()当然也就无效了。随即,也就引出了指令钩子函数的概念。

指令钩子函数
一个指令定义对象可以提供如下几个钩子函数 (均为可选):
  • bind:只调用一次,指令第一次绑定到元素时调用。在这里可以进行一次性的初始化设置。
  • inserted:被绑定元素插入父节点时调用。
  • update:指令所在的模板被重新解析时
  • componentUpdated:指令所在组件的 VNode 及其子 VNode 全部更新后调用。
  • unbind:只调用一次,指令与元素解绑时调用。
所以这里我们需要使用使用inserted这个钩子函数,在input这个元素被插入到父节点时,调用elemnet.focus()方法。

代码应该这样编写:
在这里插入图片描述

使用函数和对象形式自定义指令有啥区别?

大家也看出来了,需求1使用的是函数的形式,需求2使用的是对象的形式。

使用函数:默认使用的钩子函数就是bing 和 update,不包括inserted.
使用对象:可以自定义钩子函数,需要哪个就使用哪个。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值