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>