自定义指令

博客围绕Vue自定义指令展开,介绍了定义v-big和v-fbind指令的需求及注意点,如指令命名规范、this指向等。还总结了自定义指令的定义语法,包括局部和全局指令,以及配置对象中常用的3个回调,同时强调了指令定义和使用时的命名规则。

1.定义一个v-big指令,使得展示的数字放大10倍


<body>
    <div id="root">
        <!--1.定义一个指令,使得n值放大十倍-->
        <h2>当前的n值是:<span v-text="n"></span></h2>
        <h2>放大10倍后的n值是:<span v-big="n"></span> </h2>
        <button @click="n++">点我n+1</button>
        <hr>
        <!--2.定义一个指令,使得input框自动获取焦点-->
        <!--autofocus不是在每个浏览器都能实现-->
        <input type="text" v-fbind:value="n">
    </div>
</body>
<script>
    new Vue({
        el:'#root',
        data:{
          n:1,
        },
        directives:{
            //不需要再写v-
       
            //改方法会接收到两个参数:
            //1.一个对象的标签   
            //2.一个对象binding,里面有一个值value——该指令用到的传入的原始值

            //何时会被调用?
            //1.指令与元素成功绑定时(一上来)
            //2.指令所在的模板被重新解析时
            big(element,binding){
                element.innerText=binding.value * 10
            },
            //fbind(element,binding){
            //    element.value=binding.value
            //    //由于绑定时就会被调用,所以focus函数调用时间出现问题,所以直接写不奏效
            //    element.focus()
            //}
            fbind:{
                //指令与元素绑定时调用
                bind(element,binding){
                    element.value=binding.value
                },
                //指令所在元素被插入页面时调用
                //!!!注意函数名称是inserted
                inserted(element,binding){
                    element.focus()
                },
                //指令所在模板被重新解析时调用
                update(element,binding){
                    element.value=binding.value
                    element.focus()
                }
            }
        }
    })
</script>

注意点:

1.定义指令名的时候,官方推荐多个单词用-分隔,不要写成驼峰的形式。

2.如果命名里面出现了-,写directives的时候,名称需要用''包裹起来,不能用简写形式。

3.指令回调函数中的this(不管写不写箭头函数),都指的是window(需要的数据都通过binding传入了)

4.指令只有在该vue实例中才能使用

5.定义全局指令:(在vue对象之外)

Vue.directives('fbind',{
        //指令与元素绑定时调用
        bind(element,binding){
            element.value=binding.value
        },
        //指令所在元素被插入页面时调用
        //!!!注意函数名称是inserted
        inserted(element,binding){
            element.focus()
        },
        //指令所在模板被重新解析时调用
        update(element,binding){
            element.value=binding.value
            element.focus()
        }
    })

需求1:定义一个v-big指令,和v-text功能类似,但会把绑定的数值放大10倍。

需求2:定义一个v-fbind指令,和v-bind功能类似,但可以让其所绑定的input元素默认获取焦点。

自定义指令总结:

一、定义语法:

(1).局部指令:

(2).全局指令:

二、配置对象中常用的3个回调:

(1).bind:指令与元素成功绑定时调用。

(2).inserted:指令所在元素被插入页面时调用。

(3).update:指令所在模板结构被重新解析时调用。

三、备注:

1.指令定义时不加v-,但使用时要加v-;

2.指令名如果是多个单词,要使用kebab-case命名方式,不要用camelCase命名

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值