1. 程式人生 > 其它 >Vue 內建指令 && 自定義指令

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>