vue 自定义指令( 全局自定义指令 | 局部自定义指令 )

文章目录

在 Vue.js 中,自定义指令允许你注册一些带有钩子函数的指令,这些钩子函数会在特定的生命周期阶段被调用。

钩子函数参数:

el:指令绑定的元素。

binding:一个包含指令值、参数、修饰符等的对象。包含以下属性 name:指令名称,不包含v-前缀 .value 指令的绑定值 例如在 v-my-directive="1 + 1" 中,值是 2。

vnode:Vue 虚拟 DOM 节点。

oldVnode:之前的渲染中代表指令所绑定元素的 VNode。仅beforeUpdate 和 updated 钩子中可用。

复制代码
 调用时机:指令绑定到元素时调用,只调用一次。
 bind(el, binding, vnode, oldVnode)

 调用时机:被绑定元素插入父节点时调用(父节点存在即可调用,不必存在于 document 中)。
 inserted(el, binding, vnode, oldVnode)

  调用时机:所在组件的 VNode 更新时调用,但是可能发生在其子 VNode 更新之前。指令的值可能发生了改变,也可能没有。但是你可以通过比较 binding.oldValue 和 binding.value 来确定是否变化。
  update(el, binding, vnode, oldVnode)

  调用时机:指令所在组件的 VNode 及其子 VNode 全部更新后调用。
  componentUpdated(el, binding, vnode, oldVnode)

  调用时机:只调用一次,指令与元素解绑时调用。
  unbind(el, binding, vnode, oldVnode)

全局自定义指令

通过Vue.directive(id, definition)方式注册全局指令,然后在入口文件中进行Vue.use()调用。也可以批量注册指令,新建一个directives/index.js文件,并在其中导入和注册多个指令。

html 复制代码
    <div id="app">
        <input type="text" v-focus/>
        <input type="text" v-color="msg" />

    </div>
		//注册一个全局的自定义指令 v_focus
        //focus是自定义的指令
        Vue.directive('focus', {
            //inserted 是钩子函数 表示当被绑定的元素插入到DOM中时
            inserted: function(el) {
                //el是指令绑定的元素
                el.focus()
            }
        })


        //自定义指令带参数
        Vue.directive('color', {
            bind: function(el, binding) {
                el.style.backgroundColor = binding.value
            }
        })
        var vm = new Vue({
            el: '#app',
            data: {
                msg: 'red'
            },
                    })

局部注册自定义指令

通过组件的directives选项进行局部注册,该指令只在本组件中可用。

html 复制代码
 var vm = new Vue({
            el: '#app',
            data: {
                msg: 'red'
            },
            //局部指令 只能在当前组件使用
            derectives: {
                color: {
                    bind: function(el, binding) {
                        el.style.backgroundColor = binding.value
                    }
                },
                focus: {
                    inserted: function(el) {
                        //el是指令绑定的元素
                        el.focus()
                    }
                }

            }
        })
相关推荐
FungLeo4 小时前
成为全栈·React 管理后台篇·总复盘:从“接口能调通”到“后台值得使用”
前端·react.js·前端框架·项目复盘·成为全栈
Csvn5 小时前
并发模式:让渲染学会排队、插队和让路
前端
可乐鸡翅yeah_5 小时前
新手梳理:M3U8 线上问题,哪些是前端锅,哪些是后端锅
前端·ios·音视频·实时音视频·m3u8·音视频在线播放
Flynt5 小时前
Linear 用 1000 个 PR 换掉 styled-components,我写了 200 个按钮,把这笔账复现了一遍
前端·css·preact
JavaGuide6 小时前
NVIDIA 又开源了!这次给 AI Agent 加上权限管控
前端·后端
excel7 小时前
prisma 如何处理数据库竞态
前端·数据库·后端
莪_幻尘8 小时前
Skill 体检:30 个 Skill 全凭感觉?体检器先自曝了 8 个“假 0 分
前端·人工智能·llm
风骏时光牛马8 小时前
AI模型综合能力评测:性能、指令遵循与多场景实测对比
前端
Frag0ut8 小时前
Chrome与Chromium内核浏览器在Windows 11上的新特性全景解析
前端·chrome·windows·web安全·chromium·gemini ai·playready drm
hiahiahia1239 小时前
实现完整 Tool Dispatcher
开发语言·前端