Vue自定义指令

    自定义指令总结:
        1、 定义语法:
            局部指令:
                new Vue(directives:{指令名:配置对象}或directives:{指令名:回调函数})
            全局指令:
                Vue.directive(指令名,配置对象) 或Vue.directive(指令名,回调函数)
        2. 配置对象中三个回调:
            1. bind: 指令与元素成功绑定时调用
            2. inserted : 指令所在元素被插入页面时被调用
            3. update: 指令所在模板被重新解析时调用
        3. 备注
            1. 指令定义时不加v- ,但使用时要加v-
            2. 指令名如果是多个单词,要使用kebab-case 命名方式 不要用camelCase命名

代码实列

<body>
    <div id="root">
        <div>n的值是<span v-text="n"></span></div><br>
        <div>放大十倍的n是 <span v-big="n"></span></div><br>
        <button @click="n++"> 点我n+1</button>
        <hr>
        <!-- 文本框一开始就获取焦点 -->
        <input type="text" v-fbind="n">
    </div>
    <script>
        Vue.config.productionTip = false;
        //全局定义自定义指令(对象式)
        Vue.directive("fbind", {
            bind(element, binding) {
                element.value = binding.value;
            },
            inserted(element, binding) {
                element.focus()
            },
            update(element, binding) {
                element.value = binding.value;
            },
        })

        // //全局定义自定义指令(函数式)
        Vue.directive("big", function (element, binding) {
            //将n扩大10倍,再填入标签中
            element.innerText = binding.value * 10
        })
        new Vue({
            el: "#root",
            data: {
                n: 1,
            },
            //自定义指令(局部定义)
            // directives: {
            //     // 函数式定义
            //     big(element, binding) {
            //         //将n扩大10倍,再填入标签中
            //         element.innerText = binding.value * 10
            //     },
                // 对象式定义
                // fbind:{
                //     bind(element,binding){
                //         element.value = binding.value;
                //     },
                //     inserted(element,binding){
                //         element.focus()
                //     },
                //     update(element,binding) {
                //         element.value = binding.value;
                //     },
                // }

            // }
        })
    </script>
</body>
posted @ 2022-07-17 23:27  小罗要有出息  阅读(106)  评论(0编辑  收藏  举报