Vue 内置指令 && 自定义指令

 

 1 <!DOCTYPE html>
 2 <html>
 3     <head>
 4         <meta charset="UTF-8" />
 5         <title>Vue 内置指令</title>
 6         <script type="text/javascript" src="../js/vue.js"></script>
 7         <script type="text/javascript" src="../js/day.min.js"></script>
 8         <style>
 9             [v-cloak]{
10                 display: None;
11             }
12         </style>
13     </head>
14     <body>
15         <!-- 
16             内置指令:
17                 v-bind:单项绑定解析表达式,可简写为“:xxx”
18                 v-model:双向数据绑定
19                 v-for:遍历数组、对象、字符串
20                 v-on:绑定时间监听,可简写为“@”
21                 v-if、v-else-if、v-else:条件渲染(动态控制节点是否存在)
22                 v-show:条件渲染(动态孔子节点是否展示)
23                 v-text:向其所在的节点中渲染文本内容。与插值语法的区别:v-text会替换掉节点中的内容,{{xx}}则不会
24                 v-html:
25                     1.作用:向指定节点中渲染包含html结构的内容
26                     2.与差值语法的区别:
27                         .v-html会替换掉节点中所有的内容,{{xxx}}则不会
28                         .v-html可以识别html结构
29                     3.严重注意:v-html有安全性问题!!!
30                         .在网站上动态渲染任意HTML是非常危险的,容易导致xss攻击
31                         .一定要在可以的内容上使用v-html,永不要用在用户提交的内容上
32                 v-cloak:没有值
33                     1.本质是一个特殊属性,Vue实例创建完毕并接管容器后,会删掉v-cloak属性
34                     2.使用css配合v-cloak可以解决网速慢时页面展示出{{xxx}}的问题
35                 v-once:没有值
36                     1.v-once所在节点在初次动态渲染后,就视为静态内容了(只读一次n的值)
37                     2.以后数据的改变不会硬气v-once所在结构的更新,可以用于优化性能
38                 v-pre:没有值
39                     1.跳过其所在节点的编译过程(vue不解释该节点)
40                     2.可利用它跳过:没有使用指令语法、没有使用差值语法的节点,会加快编译
41          -->
42         <div id="root" v-cloak>
43             <div>你好,{{name}}</div>
44             <div v-text="name">你好,</div>
45             
46             <div v-text="str"></div> <!-- html 标签不被解析 -->
47             <div v-html="str"></div> <!-- html 标签会被解析 -->
48 
49             <h3 v-once>n的初始值:{{n}}</h3>
50             <h3>当前n的值:{{n}}</h3>
51             <button @click="n++">点我n的值+1</button>
52 
53             <h3 v-pre>n的初始值:{{n}} 这里加了pre属性后,{{n}}并不会解析</h3>
54         </div>
55     </body>
56 
57     <script type="text/javascript" >
58         Vue.config.productionTip = false;//     阻止 vue 在启动时生成生产提示。
59         
60         let vm = new Vue({
61             el: "#root",
62             data:{
63                 name: 'BaiYeShu',
64                 str: '<h3>你好,</h3>',
65                 n: 1
66             },
67             
68         });
69     </script>
70 </html>

 

 1 <!DOCTYPE html>
 2 <html>
 3     <head>
 4         <meta charset="UTF-8" />
 5         <title>Vue 自定义指令</title>
 6         <script type="text/javascript" src="../js/vue.js"></script>
 7         <script type="text/javascript" src="../js/day.min.js"></script>
 8         
 9     </head>
10     <body>
11         <!-- 
12             自定义指令总结:
13                 1.定义语法:
14                     .局部指令:
15                         new Vue({
16                             directives:{指令名:配置对象}   或者   directives:{指令名:回调函数}
17                         })
18                     .全局指令:
19                         Vue.directive('指令名', 配置对象)   或者   Vue.directive('指令名', 回调函数)
20                 2.配置对象中常用的3个回调:
21                         .bind: 指令与元素成功绑定时调用
22                         .inserted: 指令所在元素被插入页面时调用
23                         .update: 指令所在模板结构被重新解析时调用
24                 3.备注
25                         .指令定义时不加v-,但使用时要加v-
26                         .指令名如果是多个单词,要使用kebab-case命名方式,不要用kebabCase命名
27                 
28          -->
29         <div id="root" v-cloak>
30             <h2>{{name}}</h2>
31             <h2>当前的n值是:<span v-text="n"></span></h2>
32             <h2>n放大10倍的值是:<span v-big="n"></span></h2>
33             <button @click="n++">点我n+1</button>
34             <br />
35             <input type="text" v-big-number="n" >
36         </div>
37     </body>
38 
39     <script type="text/javascript" >
40         Vue.config.productionTip = false;//     阻止 vue 在启动时生成生产提示。
41         Vue.directive('big-number',{ // 全局指令
42             bind(element, binding){
43                 element.value = binding.value;
44             },
45             inserted(element, binding){
46                 element.setFouse();
47             },
48             update(element, binding){
49                 element.value = binding.value;
50             }
51         })
52         
53         let vm = new Vue({
54             el: "#root",
55             data:{
56                 name: 'BaiYeShu',
57                 n: 1
58             },
59             directives:{
60                 'big'(element, binding){
61                     console.log('big', this); // 这里directives,所有指令相关的函数,this都是window
62                     element.innerText = binding.value * 10;
63                 },
64                 // 'big-number':{  // 局部指令
65                 //     bind(element, binding){
66                 //         element.value = binding.value;
67                 //     },
68                 //     inserted(element, binding){
69                 //         element.setFouse();
70                 //     },
71                 //     update(element, binding){
72                 //         element.value = binding.value;
73                 //     }
74                 // }
75             }
76             
77         });
78     </script>
79 </html>

 

posted @ 2022-05-25 17:13  看一百次夜空里的深蓝  阅读(237)  评论(0编辑  收藏  举报