iis服务器助手广告广告
返回顶部
首页 > 资讯 > 前端开发 > JavaScript >Vue自定义指令的使用实例介绍
  • 215
分享到

Vue自定义指令的使用实例介绍

Vue自定义指令使用Vue自定义指令原理 2023-05-16 14:05:57 215人浏览 泡泡鱼
摘要

目录何为自定义指令实例解析1.基本知识介绍2.使用自定义指令实现改变输入框位置总结何为自定义指令 通过前面的学习,我们都有了一定的Vue知识,我们都知道可以在Vue实例创建后,在te

何为自定义指令

通过前面的学习,我们都有了一定的Vue知识,我们都知道可以在Vue实例创建后,在template标签中写我们的界面,当我们需要控制某个dom元素的显示或者隐藏时,我们可以使用v-if指令。循环打印一个列表时,我们可以使用v-for指令等…,然而这些指令都是Vue给我们提供的,我们其实可以自己定义我们的指令,其实我理解这个自定义指令就是把某个功能做一个封装,以这个指令提供给调用者使用。减少相同代码的重复编写。在Vue中,自定义指令可以有全局定义和局部定义两种方式,下面我们一起看下如何定义自定义指令

实例解析

1.基本知识介绍

我们以一个简单的输入框自动焦的例子来演示Vue的自定义指令,具体的场景是:界面中有一个输入框,当界面加载出来后,让输入框自动获取焦点,我们先看下一般的实现方法,代码如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta Http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-
    scale=1.0">
    <title>自定义指令</title>
    <script src="https://unpkg.com/vue@next"></script>
</head>
<body>
    <div id="root"></div>
</body>
<script>
 const app = Vue.createApp({
    mounted(){
        this.$refs.input.focus();
    },
        template: 
        `
        <div>
            <input ref="input"/>
        </div>
        `
    });
    const vm = app.mount('#root');
</script>

运行结果读者可以自己运行看下效果,然后去掉focus函数调用,再运行看效果

我们在输入框中使用ref属性的方式,当页面加载完后,使用this.$refs.input.focus(),获取到input输入框,然后调用focus方法让输入框获取焦点。

使用上面的方法虽然能完成我们的需求,但是写起来比较麻烦,而且需要在我们的app实例的mounted()方法中增加聚焦的逻辑,使用自定义指令可以更简单的实现上面的输入框自动获取焦点的功能,代码如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-
    scale=1.0">
    <title>自定义指令</title>
    <script src="https://unpkg.com/vue@next"></script>
</head>
<body>
    <div id="root"></div>
</body>
<script>
 const app = Vue.createApp({
       data(){
        return{
            display:true
        	}
       },
        template: 
        `
        <div v-show="display">
            <input v-focus/>
        </div>
        `
    });
    // 定义全局的自定义指令
    app.directive('focus',{
        mounted(el){
            console.log(el);
            el.focus();
            console.log('mounted');
        }
    });
    const vm = app.mount('#root');
</script>

如上面代码所示,使用app.directive(‘指令名称’,{ xxxx});的方式可以自定义的指令,使用时在对应的dom元素上添加v-指令名称就可以了,就如本例子中,调用的方法如下:

<input v-focus/>

这时候运行代码会发现效果和我们之前做的一模一样,这个写法更简单。在文中我们看到了mounted函数,这个函数是Vue生命周期的函数吗,意思是当界面挂载完成时会回调它,el参数就是我们使用自定义指令的那个Dom元素

 mounted(el){
            console.log(el);
            el.focus();
            console.log('mounted');
        }

其实定义自定义指令时不只可以重写mounted()函数,还可以重写其他的函数,如下所示:

    app.directive('focus',{
        beforeMount(el){
            console.log('beforeMount');
        },
        mounted(el){
            console.log('mounted');
        },
        beforeUpdate(){
            console.log('beforeUpdate');
        },
        updated(){
            console.log('updated');
        },
        beforeUnmount(){
            console.log('beforeUnmount');
        },
        unmounted(){
            console.log('unmounted');
        }
    });

在浏览器中运行上面代码,打开console,如下

我们可以在对应的生命周期回调中做对应的事情。

在上面的代码中我们定义自定义指令用的是全局的方式,其实我们还有局部的方式,代码如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-
    scale=1.0">
    <title>自定义指令</title>
    <script src="https://unpkg.com/vue@next"></script>
</head>
<body>
    <div id="root"></div>
</body>
<script>
 const direc = {
      focus:{
            mounted(el){
               el.focus();
            }
        }
    };
 const app = Vue.createApp({
       data(){
        return{
            display:true
        }
       },
       directives:direc,
        template: 
        `
        <div v-show="display">
            <input v-focus/>
        </div>
        `
    });
     const vm = app.mount('#root');
</script>

使用局部定义自定义属性的方式是:

 const direc = {
      focus:{
            mounted(el){
               el.focus();
            }
        }
    };

然后使用的时候需要加上:

 const app = Vue.createApp({
   ...
       directives:direc,
   ...
    });

2.使用自定义指令实现改变输入框位置

我们接下来使用Vue的自定义指令实现一个小功能,就是动态改变输入框的位置,代码如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-
    scale=1.0">
    <title>自定义指令</title>
    <style>
        .header{
            position: absolute;
        }
    </style>
    <script src="https://unpkg.com/vue@next"></script>
</head>
<body>
    <div id="root"></div>
</body>
<script>
 const app = Vue.createApp({
    data(){
        return{
            pxValue:50
        }  
    },
        template: 
        `
        <div>
            <div v-pos:left="pxValue" class="header">
            <input />
            </div>
        </div>
        `
    });
    app.directive('pos',{
        mounted(el,binding){
            el.style[binding.arg] = binding.value + 'px';
        },
        updated(el,binding){
            el.style[binding.arg] = binding.value + 'px';
        }  
    });
    // 上面代码等价于下面注释掉的代码
    // app.directive('pos',(el,binding)=>{
    //     console.log(binding.arg,'binding')
    //     el.style[binding.arg]=(binding.value+'px');
    // })
    const vm = app.mount('#root');
</script>

首先我们定义一个样式,使用绝对定位的方式确定输入框的位置:

    <style>
        .header{
            position: absolute;
        }
    </style>

使用一个pxValue表示输入框位置的值,然后可以通过

v-pos:left="pxValue"的方式确定输入框是距离左边还是右边或者距离其他参照物。然后自定义指令的时候,拿到属性传过来的值和pxValue,改变输入框位置:

  app.directive('pos',{
        mounted(el,binding){
            el.style[binding.arg] = binding.value + 'px';
        },
        updated(el,binding){
            el.style[binding.arg] = binding.value + 'px';
        }  
    });

这里也可以写成:

   app.directive('pos',(el,binding)=>{
        console.log(binding.arg,'binding')
        el.style[binding.arg]=(binding.value+'px');
    })

然后使用的时候就可以如下:

 <div v-pos:left="pxValue" class="header">
或者  <div v-pos:right="pxValue" class="header">
或者  <div v-pos:top="pxValue" class="header">

运行之后,可以修改对应的值查看效果,这里留给读者去自己体验:

总结

本文主要介绍了Vue使用自定义指令的两种方法,一种是全局自定义指令的使用方式,另一种是局部自定义指令的使用方式。需要注意的是,局部自定义指令定义完后需要在Vue.createApp({directives:局部自定义指令的变量名});才可以使用自定义指令。最后我们使用了一个动态改变输入框位置的例子展示了自定义指令的使用方式。

到此这篇关于Vue自定义指令的使用实例介绍的文章就介绍到这了,更多相关Vue自定义指令内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: Vue自定义指令的使用实例介绍

本文链接: https://www.lsjlt.com/news/210046.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Vue自定义指令的使用实例介绍
    目录何为自定义指令实例解析1.基本知识介绍2.使用自定义指令实现改变输入框位置总结何为自定义指令 通过前面的学习,我们都有了一定的Vue知识,我们都知道可以在Vue实例创建后,在te...
    99+
    2023-05-16
    Vue自定义指令使用 Vue自定义指令原理
  • Vue自定义指令的使用详细介绍
    目录1. 概述2. 钩子函数3. 自定义全局指令4. 自定义局部指令5. 使用自定义指令实现权限管理6. 使用自定义指令实现表单验证1. 概述 除了核心功能默认内置的指令,Vue也允...
    99+
    2022-11-13
  • Vue自定义指令及使用实例
    这篇文章主要介绍了Vue自定义指令及使用实例,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。一、什么是指令学习 vue 的时候肯定会接触指令,那么什么是指令呢?在 vue 中提...
    99+
    2023-06-15
  • Vue开发常用的指令实例介绍
    这篇文章主要讲解了“Vue开发常用的指令实例介绍”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Vue开发常用的指令实例介绍”吧!1. V-Hotkey仓库地...
    99+
    2022-10-19
  • vue全局自定义指令和局部自定义指令的使用
    目录局部自定义指令(只针对组件内的元素)定义全局自定义指令自定义指令的钩子函数自定义指令钩子函数的参数例子除了默认设置的核心指令 (v-model 和 v-show),Vue 也允许...
    99+
    2022-11-13
  • Vue自定义指令v-focus实例详解
    目录前言自定义指令 directive项目实际使用技术背景实际操作优势setTimeout(fn, 0) 永远的神$nextTick(callback)小结前言 本文直接参考vue2...
    99+
    2022-11-13
  • Vue自定义指令的示例分析
    这篇文章主要介绍Vue自定义指令的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!在 AngularJs 中,它的指令使用 directive ( name,factor_fu...
    99+
    2022-10-19
  • vue如何使用自定义指令
    这篇文章将为大家详细讲解有关vue如何使用自定义指令,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。 使用自定义指令的逻辑与使用事件修饰符的逻辑...
    99+
    2022-10-19
  • Vue实现带参数的自定义指令示例
    正文 自定义指令参考官方文档:vuejs.bootcss.com/guide/custo… <!DOCTYPE html> <html lang="...
    99+
    2023-01-11
    Vue 带参数自定义指令 Vue 参数指令 Vue 自定义指令
  • Vue实用的自定义指令有哪些
    这篇文章主要讲解了“Vue实用的自定义指令有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Vue实用的自定义指令有哪些”吧!前言:Vue自定义指令有全局注册和局部注册两种方式。先来看看注...
    99+
    2023-06-29
  • vue中的自定义指令如何使用
    这篇文章主要介绍“vue中的自定义指令如何使用”,在日常操作中,相信很多人在vue中的自定义指令如何使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”vue中的自定义指令如何使用”的疑惑有所帮助!接下来,请跟...
    99+
    2023-06-29
  • Vue 3.0自定义指令的使用入门
    目录一、自定义指令1、注册全局自定义指令2、使用全局自定义指令3、完整的使用示例二、注册全局自定义指令的过程三、应用挂载的过程四、阿宝哥有话说4.1 Vue 3 有哪些内置指令?4....
    99+
    2022-11-12
  • vue自定义指令directive的使用场景
    目录1. 一个指令定义对象可以提供如下几个钩子函数(均为可选)2.指令钩子函数会被传入以下参数3.使用自定义指令场景的示例1. 一个指令定义对象可以提供如下几个钩子函数(均为可选) ...
    99+
    2023-05-16
    vue 自定义指令directive 自定义指令directive directive使用场景
  • 浅析vue中的自定义指令使用
    Vue3版本:有稍微变化,由于本文主要说的都是 Vue2 版本的(也是手上很多 vue2 版本的老项目在维护),Vue3的就不做详细介绍了,感兴趣可查看: cn.vuejs.org/guide/reusa…实战以下都是我在项目中用到的自定义...
    99+
    2023-05-14
    Vue 指令 自定义指令
  • Vue怎么自定义指令directive使用
    本篇内容主要讲解“Vue怎么自定义指令directive使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Vue怎么自定义指令directive使用”吧!1. 一个指令定义对象可以提供如下几个钩...
    99+
    2023-07-06
  • Vue中如何使用自定义指令
    今天就跟大家聊聊有关Vue中如何使用自定义指令,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。1.自定义指令的语法Vue自定义指令语法如下:Vue.d...
    99+
    2022-10-19
  • 详解Vue自定义指令及使用
    目录一、什么是指令vue 中常用的一些内置 v- 指令v-if 和 v-show 的对比二、自定义指令的钩子函数三、全局指令四、局部指令五、带参数的自定义指令六、函数简写七、应用实例...
    99+
    2022-11-12
  • vue中的自定义指令clickOutside
    目录自定义指令clickOutside首先我们先看看vue官方的文档clickoutside 这个指令用在哪里呢?写法自定义指令clickoutside使用及扩展用法自定义指令cli...
    99+
    2022-11-13
  • vue中4个自定义指令讲解及实例用法
    四个实用的vue自定义指令 1、v-drag 需求:鼠标拖动元素 思路: 元素偏移量 = 鼠标滑动后的坐标 - 鼠标初始点击元素时的坐标 + 初始点击时元素距离可视区域的top、le...
    99+
    2022-11-12
  • Vue 非常实用的自定义指令分享
    目录1.v-copy2.v-longpress3.v-debounce4.v-emoji5.v-LazyLoad6.v-permission7.vue-waterMarker8.v-...
    99+
    2022-11-13
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作