美文网首页
2022-04-01 Vue自定义指令

2022-04-01 Vue自定义指令

作者: 93岁卧床开发 | 来源:发表于2022-04-01 08:06 被阅读0次

    1 概述

    除了内置指令外,Vue 也允许注册自定义指令
    有的情况下,你仍然需要对普通 DOM 元素进行底层操作
    这时候使用自定义指令更为方便
    文档
    https://cn.vuejs.org/v2/guide/custom-directive.html

    2 要点

    2.1 注册全局指令

    // 指令名不要带 v- 
    Vue.directive('指令名', { 
      // el 代表使用了此指令的那个 DOM 元素 
      // binding 可获取使用了此指令的绑定值 等 
      inserted: function (el, binding) { 
        // 逻辑代码 
      } 
    })
    

    2.2 注册局部指令

    directives : { 
      '指令名' : { 
        // 指令名不要带 v- 
        inserted (el, binding) { 
          // 逻辑代码 
        } 
      } 
    }
    

    2.3 使用方式

    <!DOCTYPE html>
    <html lang="en">
        <head>
            <meta charset="UTF-8">
            <title>自定义指令</title>
        </head>
    
        <body>
            <div id="app">
                <p v-upper-text="message"></p> 
                自动获取焦点:
                <input type="text" v-focus>
            </div>
            <script src="../js/vue.js" type="text/javascript"></script>
            <script type="text/javascript"> 
                // 1. 注册一个全局 v-upper-text 指令,注意指令名不要带 v- 
                Vue.directive('upper-text', {
                    // 因为是样式,所以不需要元素插入到DOM中,就好像link引入CSS文件时并不关心元素是否加载 
                    bind: function (el) { 
                        el.style.color = 'red' 
                    },
                    // el 代表使用了此指令的那个 DOM 元素 
                    // binding 可获取使用了引指令的绑定值 等 
                    inserted: function (el, binding) {
                        // 将在 v-upper-text 指令中获取到的值,变成大写输出到标签体中 
                        el.innerHTML = binding.value.toUpperCase()
                    }
                })
                new Vue({
                    el: '#app', data: { 
                        message: 'mengxuegu,陪你学习伴你梦想' 
                    },
                    //2. 注册一个局部指令 v-focus 
                    directives: {
                        'focus': {
                            //和js行为有关的操作,最好在inserted中执行,和样式相关的操作都可在bind中执行 
                            inserted: function (el) { 
                                // 聚焦元素 el.focus() 
                            }
                        }
                    }
                })
            </script>
        </body>
    </html>
    

    2.4 钩子函数

    一个指令定义对象可以提供如下几个钩子函数 (均为可选):
    bind:只调用一次,指令第一次绑定到元素时调用。在这里可以进行一次性的初始化设置。
    inserted:被绑定元素插入父节点时调用 (仅保证父节点存在,但不一定已被插入文档中)。
    update:所在组件的 VNode 更新时调用,但是可能发生在其子 VNode 更新之前。指令的值可能发生了改变,也可能没有。但是你可以通过比较更新前后的值来忽略不必要的模板更新 (详细的钩子函数参数见下)。
    componentUpdated:指令所在组件的 VNode 及其子 VNode 全部更新后调用。
    unbind:只调用一次,指令与元素解绑时调用。

    相关文章

      网友评论

          本文标题:2022-04-01 Vue自定义指令

          本文链接:https://www.haomeiwen.com/subject/qawojrtx.html