vue3的自定义指令

一个小案例,input框获取焦点,默认实现

复制代码
<input type="text" ref="input" name="" id="" />

import {ref,h,onMounted} from 'vue'

  setup(){
    const input  = ref(null);
    onMounted(()=>{
      input.value.focus();    //获取焦点
      console.log(input.value);
    })
    return{
      input
    }
  },
复制代码

可以通过自定义指令来实现

1.局部指令   (当前文件内)

复制代码
<input type="text" v-focus/>

export default {
  //自定义指令
  directives:{
    focus:{
      mounted(el,bindings,vnode,preVnode){   //在生命周期中操作
        el.focus()            //直接调用focus方法
      }
    }
  },
}
复制代码

2.全局指令     (在main.js文件中定义)

//全局指令
app.directive('focus',{
  mounted(el,bindings,vnode,preVnode){
    el.focus()
  }
})

 

指令的生命周期

created: 在绑定元素的attribute 或事件监听器被应用之前调用

beforeMount,mounted,beforeUpdate,updated,beforeUnmount,unmounted

 

封装自定义指令的标准格式

1.创建规范的文件格式

 

 index文件为所有自定义指令的出口文件,传入app,(这里的app是在main.js中传入的)

 

 在main.js文件中

import registerDirectives from './views/direactives';

registerDirectives(app)

2.现在就可以在direactives中的format-time.js或者format-price.js文件中写相关逻辑代码

下面是一个格式化时间戳的小案例(format-time)

 

 3.需要使用该自定义组件时,如下操作

 

 基础的全局自定义组件的步骤到此结束了

posted @   无何不可88  阅读(317)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
点击右上角即可分享
微信分享提示