首页 > 技术文章 > vue-自定义指令

AnnLing 2021-08-27 15:33 原文

、简介

vue可以自定义指令。自定义指令分为:全局指令和局部指令。

 

二、自定义指令

1、自定义全局指令

  使用全局API中的Vue.directive 来实现自定义全局指令。

 1     <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4   <meta charset="UTF-8">
 5   <title>自定义指令</title>
 6   <!--引入vue-->
 7   <script src="../js/vue.js"></script>
 8 </head>
 9 <body>
10 
11     <div id="hello">
12         <!-- 使用指令的时候,必须在指令之前加v-。即格式为:v-指令ID -->
13         <h3 v-test>{{msg}}</h3>
14         <button @click='changeData'>更新数据</button>
15         <hr>
16         <h3 v-word>{{name}}</h3>
17         <h4 v-word:param.haha='userName'>{{name}}</h4>
18         <hr>
19         <h3 v-lolo>{{text}}</h3>
20     </div>
21 
22     <script>
23 
24         //自定义全局指令(注意:Vue.directive()这个方法要写在new Vue之前)
25 
26         //1.自定义全局指令test
27         Vue.directive('test',{
28             //钩子函数(可选)
29             bind(){    //常用
30                 alert('指令第一次绑定到元素上时调用,只调用一次,可以执行初始化操作');
31             },
32             inserted(){
33                 alert('指令所绑定的元素插入到DOM中时调用');
34             },
35             update(){
36                 alert('被绑定元素所在模板更新时调用');
37             },
38             componentUpdated(){
39                 alert('被绑定元素所在模板完成一次更新周期时调用');
40             },
41             unbind(){
42                 alert('指令与元素解绑时调用,只执行一次');
43             }
44         });
45 
46         //2.自定义全局指令word
47         Vue.directive('word',{
48             bind(el,binding){
49                 console.log('bind函数的参数el',el);    //el是当前指令所绑定的元素,DOM对象
50                 el.style.backgroundColor='red';    //对el进行操作
51 
52                 console.log('bind函数的参数binding',binding);    //一个对象,包含很多property
53                 console.log('指令名(不带v-)',binding.name);        //指令名(不带v-)
54                 console.log('指令名(带有v-)',binding.rawName);    //指令名(带有v-)
55                 console.log('指令的绑定值',binding.value);                //指令的绑定值
56                 console.log('指令的绑定值字符串形式',binding.expression);    //绑定值的字符串形式
57                 console.log('指令的参数',binding.arg);                    //传给指令的参数
58                 console.log('指令的包含修饰符的对象',binding.modifiers);    //一个包含修饰符的对象
59             }
60         });
61 
62         //3.自定义全局指令lolo(这是自定义全局指令的简单写法:传入一个简单的指令函数,bind和update时会调用)
63         Vue.directive('lolo',function(){
64             console.log('这是自定义全局指令的简单写法');
65         })
66 
67         //vue实例
68         let vm = new Vue({
69             el:'#hello',
70             data:{
71                 msg:'欢迎来到王者荣耀',
72                 name:'辣木阳子',
73                 userName:'方文山',
74                 text:'我们是中国人'
75             },
76             methods:{
77                 changeData(){
78                     this.msg='欢迎来到更新后的王者荣耀'
79                 }
80             },
81         });
82     </script>
83 </body>
84 </html>

 

2、自定义局部指令

 使用选项(资源)中的directives 实现自定义局部指令。

 1     <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4   <meta charset="UTF-8">
 5   <title>自定义指令</title>
 6   <!--引入vue-->
 7   <script src="../js/vue.js"></script>
 8 </head>
 9 <body>
10 
11     <div id="hello">
12         <!-- 使用指令的时候,必须在指令之前加v-。即格式为:v-指令ID -->
13         <input type="text" v-model='text' v-fo>
14     </div>
15 
16     <script>
17         //vue实例
18         let vm = new Vue({
19             el:'#hello',
20             data:{
21                 msg:'欢迎来到王者荣耀',
22                 name:'辣木阳子',
23                 userName:'方文山',
24                 text:'我们是中国人'
25             },
26             methods:{
27                 changeData(){
28                     this.msg='欢迎来到更新后的王者荣耀'
29                 }
30             },
31             //自定义局部指令
32             directives:{
33                 //自定义局部指令foc
34                 foc:{
35                     inserted(el){
36                         el.focus();    //实现被绑定该指令的文本框自动获得焦点
37                     }
38                 }
39             },
40         });
41     </script>
42 </body>
43 </html>

 

推荐阅读