在大多数情况下,您可以操作数据来修改视图,反之亦然。但是偶尔操作原生DOM还是免不了的。这时候可以使用自定义指令。比如你想让页面的文本框自动获得焦点,我们在没有学习自定义指令的时候可能会这样做。constapp=Vue.createApp({mounted(){this.$refs.input.focus();},template:``,});在mountedhook函数中,通过$refs获取需要聚焦的DOM元素,然后调用focus方法完成自动聚焦功能。基本上,上面的方法已经实现了我们需要的功能,但是如果我们有多个组件需要这个功能,那我们就只能复制这段代码,重新实现逻辑了。如果您使用自定义指令,让我们看看该怎么做。constapp=Vue.createApp({//Bindcustomdirectivetemplateviav-[customdirectivename]:``,});//注册一个全局的自定义指令app.directive('focus',{//当绑定的元素插入DOM时执行..mounted(el){el.focus();}})如上,我们定义了一个全局的自定义Commandfocus,并绑定它到需要通过v-focus聚焦的输入元素。如果其他组件或模块也需要焦点功能,只需绑定该指令即可。自定义命令的钩子函数当我们在上面定义命令时,我们会发现它包含了挂载的钩子函数。该命令还提供了以下钩子函数,我们将以代码的形式为您一一列举。app.directive('directiveName',{//beforeMount(el){}在挂载指令绑定元素之前,//mounted(el,binding){}在挂载指令绑定元素之后,//指令绑定元素是因为数据修改触发修改beforeUpdate(el){},//指令绑定元素在数据修改触发修改后被修改updated(el){},//指令绑定元素被销毁beforeUnmount(el){},//指令绑定卸载(el){},});元素被破坏后,效果不再一一列举。如果你有兴趣,可以尝试分别触发这些钩子函数。大多数命令钩子函数与组件非常相似,因此可以进行比较。动态指令参数接下来,让我们看另一个例子。constapp=Vue.createApp({template:`
`,});//在很多情况下,您可能希望在安装和更新时触发相同的行为,而不管其他挂钩,只需编写app.directive('absTop',(el)=>{el.style[binding.arg]='100px';});我们在div元素上绑定absTop命令,div元素本身的位置是绝对的,命令执行时绑定元素的顶部为100px。这时候就想在绑定命令的时候能够传递一个参数,让元素的top值可以根据参数来改变。代码如下:constapp=Vue.createApp({data(){return{num:100}},template:`