Vue基础进阶 之 自定义指令

自定义指令-----钩子函数

自定义指令

除了内置指令,Vue也允许用户自定义指令;

注册指令:通过全局API Vue.directive可以注册自定义指令;

自定义指令的钩子函数: bind; inserted; update; componentUpdated; unbind;

自定义指令的使用:在自定指令的名称前加 上 v-;

自定义指令的详细介绍网址:https://cn.vuejs.org/v2/guide/custom-directive.html

下面是关于这个5个钩子函数的示例;

vue代码:

    Vue.directive(‘demo‘,{
        //指令的钩子函数
        bind(){

            alert("bind 首次绑定到元素的时候执行,它只执行一次,常用于初始化操作");

        },
        inserted(){
            alert("inserted 插入到父节点之后,也就是DOM对象");
        },
        ubind(){

            alert("ubind 解除绑定");
        },
        update(){

            alert("update 绑定该指令的元素 所在的VUE实例挂载的DOM树 发生更新时调用"+"username="+vm.$refs.username.textContent);
        },
        componentUpdated(){

            alert("componentUpdated 更新后调用"+"username="+vm.$refs.username.textContent);

        }

        })

        let vm=    new Vue({
                data:{
                    username:‘perfect‘,
                    flag:true

                }
            }).$mount(‘div‘);

html:

<div>
            <input  type="text" v-model="username" /><br />
            用户名:<span v-demo ref=‘username‘>{{username}}</span><br />
            信息:<span v-if="flag">欢迎来到perfect*的博客园!!!</span>
            <button @click="flag=!flag">解除绑定</button>

    </div>

自定义指令钩子函数总的代码:

 1 <!DOCTYPE html>
 2 <html>
 3     <head>
 4         <meta charset="UTF-8">
 5         <title> 09_自定义指令钩子函数</title>
 6         <script type="text/javascript" src="../js/vue.js" ></script>
 7
 8     </head>
 9     <body>
10         <div>
11             <input  type="text" v-model="username" /><br />
12             用户名:<span v-demo ref=‘username‘>{{username}}</span><br />
13             信息:<span v-if="flag">欢迎来到perfect*的博客园!!!</span>
14             <button @click="flag=!flag">解除绑定</button>
15
16
17
18     </div>
19     </body>
20
21     <script>
22         Vue.directive(‘demo‘,{
23         //指令的钩子函数
24         bind(){
25
26             alert("bind 首次绑定到元素的时候执行,它只执行一次,常用于初始化操作");
27
28         },
29         inserted(){
30             alert("inserted 插入到父节点之后,也就是DOM对象");
31         },
32         ubind(){
33
34             alert("ubind 解除绑定");
35         },
36         update(){
37
38             alert("update 绑定该指令的元素 所在的VUE实例挂载的DOM树 发生更新时调用"+"username="+vm.$refs.username.textContent);
39         },
40         componentUpdated(){
41
42             alert("componentUpdated 更新后调用"+"username="+vm.$refs.username.textContent);
43
44         }
45
46
47         })
48
49
50
51         let vm=    new Vue({
52                 data:{
53                     username:‘perfect‘,
54                     flag:true
55
56                 }
57             }).$mount(‘div‘);
58
59
60
61
62         </script>
63 </html>

自定义指令钩子函数

自定义指令-----钩子函数的参数

自定义指令的钩子函数参数:自定义指令的钩子函数可以传递4个参数,分别是el、binding、vnode、oldVnode;

具体描述见官网API:点击我进入

el:获取DOM对象;

binding:一个包含很多属性的对象;

vnode:Vue编译生成的虚拟节点;

oldVnode:上一个虚拟节点

  • el:指令所绑定的元素,可以用来直接操作 DOM 。

示例:

binding;

示例:

binding属性的代码:

Vue.directive(‘demo‘,{
        //指令的钩子函数
        bind(el,binding){
//            console.log(el);
//            el.style.color=‘red‘;

         console.log(binding.name);//指令名
         console.log(binding.value);//指令的绑定值
         console.log(binding.expression);//字符串形式的指令表达式
         console.log(binding.arg);//传给指令的参数,可选

         console.log(binding.modifiers);//一个包含修饰符的对象

         if(binding.arg===‘click‘){

             console.log("执行了点击事件!!!");
         }
         if(binding.modifiers.once){

             console.log("只执行一次!!!");
         }

        },

        update(el,binding){
            console.log("update value="+binding.value);
            console.log("update oldvalue="+binding.oldValue);

        },

        })

        let vm=    new Vue({
                data:{
                    username:‘perfect‘,
                    flag:true

                }
            }).$mount(‘div‘);

binding中使用到HTML代码:

    <div>
            <input  type="text" v-model="username"   /><br />
            用户名:<span v-demo:click.once.stop=‘username‘ ref=‘username‘>{{username}}</span><br />
                  信息:<span    v-if="flag">欢迎来到perfect*的博客园!!!</span>
            <button v-on:click="flag=!flag">解除绑定</button>

    </div>

 1 <!DOCTYPE html>
 2 <html>
 3     <head>
 4         <meta charset="UTF-8">
 5         <title> 10_自定义指令钩子函数的参数</title>
 6         <script type="text/javascript" src="../js/vue.js" ></script>
 7
 8     </head>
 9     <body>
10         <div>
11             <input  type="text" v-model="username"   /><br />
12             用户名:<span v-demo:click.once.stop=‘username‘ ref=‘username‘>{{username}}</span><br />
13                   信息:<span    v-if="flag">欢迎来到perfect*的博客园!!!</span>
14             <button v-on:click="flag=!flag">解除绑定</button>
15
16
17
18     </div>
19     </body>
20
21     <script>
22         Vue.directive(‘demo‘,{
23         //指令的钩子函数
24         bind(el,binding){
25 //            console.log(el);
26 //            el.style.color=‘red‘;
27
28          console.log(binding.name);//指令名
29          console.log(binding.value);//指令的绑定值
30          console.log(binding.expression);//字符串形式的指令表达式
31          console.log(binding.arg);//传给指令的参数,可选
32
33          console.log(binding.modifiers);//一个包含修饰符的对象
34
35          if(binding.arg===‘click‘){
36
37              console.log("执行了点击事件!!!");
38          }
39          if(binding.modifiers.once){
40
41              console.log("只执行一次!!!");
42          }
43
44
45
46
47         },
48
49         update(el,binding){
50             console.log("update value="+binding.value);
51             console.log("update oldvalue="+binding.oldValue);
52
53
54         },
55
56
57
58         })
59
60
61
62         let vm=    new Vue({
63                 data:{
64                     username:‘perfect‘,
65                     flag:true
66
67                 }
68             }).$mount(‘div‘);
69
70
71
72
73         </script>
74 </html>

自定义指令钩子函数的参数

自定义指令简写与局部自定义指令

vue代码:

<script>
        Vue.directive(‘demo‘,function(){//自定义指令的简写
            alert(1);

        });

        let vm=    new Vue({
                data:{
                    username:‘perfect‘,
                    flag:true

                },
                directives:{//自定义指令的局部定义
                    font_style:function(el,binding){
                        el.style.color=binding.arg;

                    },
                    focus:{
                    inserted(el){
                        console.log(el);
                        el.focus();//聚焦到输入文本框中
                    }
                }
                },

            }).$mount(‘div‘);

        </script>

html:

<div>
            <input  type="text" v-model="username"  v-focus  /><br />
            用户名:<span  v-demo v-font_style:red>{{username}}</span><br />

            <button v-on:click="flag=!flag">解除绑定</button>

    </div>

 1 <!DOCTYPE html>
 2 <html>
 3     <head>
 4         <meta charset="UTF-8">
 5         <title>11_自定义指令</title>
 6         <script type="text/javascript" src="../js/vue.js" ></script>
 7
 8     </head>
 9     <body>
10         <div>
11             <input  type="text" v-model="username"  v-focus  /><br />
12             用户名:<span  v-demo v-font_style:red>{{username}}</span><br />
13
14             <button v-on:click="flag=!flag">解除绑定</button>
15
16
17
18     </div>
19     </body>
20
21     <script>
22         Vue.directive(‘demo‘,function(){//自定义指令的简写
23             alert(1);
24
25
26         });
27
28
29
30
31
32         let vm=    new Vue({
33                 data:{
34                     username:‘perfect‘,
35                     flag:true
36
37                 },
38                 directives:{//自定义指令的局部定义
39                     font_style:function(el,binding){
40                         el.style.color=binding.arg;
41
42
43                     },
44                     focus:{
45                     inserted(el){
46                         console.log(el);
47                         el.focus();//聚焦到输入文本框中
48                     }
49                 }
50                 },
51
52             }).$mount(‘div‘);
53
54
55
56
57         </script>
58 </html>

自定义指令简写与局部自定义指令

原文地址:https://www.cnblogs.com/jiguiyan/p/10740340.html

时间: 2024-07-30 20:25:30

Vue基础进阶 之 自定义指令的相关文章

什么是vue.js中的自定义指令?

问题一:什么是vue.js中的自定义指令? 自定义一些指令对底层DOM进行操作 更多参考 Vue里面有许多内置的指令,比如v-if和v-show,这些丰富的指令能满足我们的绝大部分业务需求,不过在需要一些特殊功能时,我们仍然希望对DOM进行底层的操作,这时就要用到自定义指令. 问题二:自定义指令的几个钩子函数 bind:只调用一次,指令第一次绑定到元素时调用.在这里可以进行一次性的初始化设置. inserted:被绑定元素插入父节点时调用 (仅保证父节点存在,但不一定已被插入文档中). upda

vue.js实现内部自定义指令和全局自定义指令------directive

在Vue中,我们平时数据驱动视图时候,内部自带的指令有时候解决不了一些需求,这时候,Vue给我们一个很好用的东东 directive 这个单词是我们写自定义指令的关键字哦 之定义指令为我们提供了几个钩子函数,这时候你一定好奇什么是钩子函数,说简单点,就是集中表现状态 bind: 只调用一次,指令第一次绑定到元素时调用,用这个钩子函数可以定义一个在绑定时执行一次的初始化动作. inserted: 被绑定元素插入父节点时调用(父节点存在即可调用,不必存在于 document 中). update:

手撸一个Vue滚动加载自定义指令

用Vue在移动端做滚动加载,使用mint-ui框架, InfiniteScroll指令loadmore组件,在uc浏览器和qq浏览器都无法触发.无奈我只能自己写了. 决定用vue 的自定义指令 写滚动加载. 核心的api document.body.scrollTop 滚动条滚动的距离 (这个有兼容性问题,兼容性写法) let scrollTop = document.documentElement.scrollTop || window.pageYOffset || document.body

vue 自定义指令

除了默认设置的核心指令(v-model和v-show),vue也允许注册自定义指令.在vue2.0版本中,代码复用的主要形式和抽象是组件--然而,有的情况下,你仍然需要对DOM元素进行底层操作,这时候就会用到自定义指令. 当页面加载时,元素将获得焦点(注意:autoFocus在移动版safari中不工作),事实上,你访问后,还没点击任何内容,input就获得了焦点.现在让我们完善这个指令: // 注册一个全局自定义指令 v-focus Vue.directive('focus', { // 当绑

vue自定义指令

什么是指令? 指令 (Directives) 是带有 v- 前缀的特殊属性. 它可以写在DOM元素上,对html进行操作.常用的指令比如有:v-if,v-else,v-show,v-for等.这些都是官方直接给定的,另外Vue也允许注册自定义指令,有时这很有用. 自定义指令方法 自定义一个指令很简单,官网给出一个简单的例子,自定义一个聚焦指令v-focus: // 注册一个全局自定义指令 `v-focus` Vue.directive('focus', { // 当被绑定的元素插入到 DOM 中

Vue自定义指令获取DOM元素

我们知道,Vue.js的核心是数据驱动,当数据有所变化时,DOM就会被更新,比如: <span v-text="msg"></span> export default { data(){ return{ msg : 'oldMsg' } } methods : { changeMsg : function(){ this.msg = 'newMsg' } } } 当调用了changeMsg方法,msg被修改为 ' newMsg ' ,我们可以把这次修改理解为数据

Vue自定义指令和路由

一.自定义指令 除了默认设置的核心指令( v-model 和 v-show ), Vue 也允许注册自定义指令. 下面我们注册一个全局指令 v-focus,该指令的功能是在页面加载时,元素获得焦点: <div id="app"> <p>页面载入时,input 元素自动获取焦点:</p> <input v-focus> </div> <script> // 注册一个全局自定义指令 v-focus Vue.direct

Vue.js 源码分析(二十三) 高级应用 自定义指令详解

除了核心功能默认内置的指令 (v-model 和 v-show),Vue 也允许注册自定义指令. 官网介绍的比较抽象,显得很高大上,我个人对自定义指令的理解是:当自定义指令作用在一些DOM元素或组件上时,该元素在初次渲染.插入到父节点.更新.解绑时可以执行一些特定的操作(钩子函数() 自定义指令有两种注册方式,一种是全局注册,使用Vue.directive(指令名,配置参数)注册,注册之后所有的Vue实例都可以使用,另一种是局部注册,在创建Vue实例时通过directives属性创建局部指令,局

Vue中自定义指令的使用方法!

除了核心功能默认内置的指令 (v-model 和 v-show),Vue 也允许注册自定义指令.注意,在 Vue2.0 中,代码复用和抽象的主要形式是组件.然而,有的情况下,你仍然需要对普通 DOM 元素进行底层操作,这时候就会用到自定义指令.举个聚焦输入框的例子,如下:(咳咳,借官网的用一用) 1.定义全局的自定义变量 main.js Vue.directive('color',{ inserted(el){ // 各单位注意,这里的el获取的是标签元素,说白了就是可以直接操作DOM cons