![Vue.js核心技术解析与uni-app跨平台实战开发](https://wfqqreader-1252317822.image.myqcloud.com/cover/707/47216707/b_47216707.jpg)
1.5 Vue基础指令
经过前面几节内容的学习,相信大家已经初识Vue,本节讲解的是Vue基础指令,通过基础指令可以掌握更多渲染数据的方法,实现数据的双向绑定。
1.5.1 v-cloak指令
v-cloak指令的作用是在Vue数据渲染完成之前,隐藏源代码,当快速刷新页面或者网速较慢时,Vue不能立即渲染数据,此时看到的页面如图1-3所示。
![](https://epubservercos.yuewen.com/F2C35D/26581507309218206/epubprivate/OEBPS/Images/Figure-P18_6998.jpg?sign=1738886736-J20KczMlCXGHveSKNM0jnWjlBrRheCQ1-0-dd1e6eab3428a9082aee19f316e8cb40)
图1-3 Vue数据渲染之前
当网速过慢时,浏览器显示的是Vue的源代码,对于用户来说,这是一种不友好的展现形式。所以在实现Vue项目之前,我们需要使用v-cloak指令,代码如下。
![](https://epubservercos.yuewen.com/F2C35D/26581507309218206/epubprivate/OEBPS/Images/Figure-P18_9388.jpg?sign=1738886736-f60J77tmL8zM3HbvR5OZi5ZMUyGwIC9F-0-89492b359e029615cb5a00f5ba0617c8)
上述代码有两处注释。
(1)注释一表示在Vue控制的根节点使用v-cloak指令。
(2)注释二表示使用CSS样式控制Vue源码的隐藏。
v-cloak原理:由于快速刷新页面或者网速原因,导致Vue.js没有生效,在生效之前,只要是添加了v-cloak指令的元素,都会隐藏(样式设置),当Vue.js加载完毕,所做的第一件事就是将页面中的v-cloak指令删掉,所以数据又可以正常显示了。
1.5.2 v-text指令
作用:渲染data中的属性值。
前文讲过使用插值表达式渲染data中的属性值,本节讲解渲染数据的另外一种方式,即使用v-text指令。渲染msg属性的代码如下。
M层代码如下。
![](https://epubservercos.yuewen.com/F2C35D/26581507309218206/epubprivate/OEBPS/Images/Figure-P20_9391.jpg?sign=1738886736-WkBjgbZvjbQNLwPESGzePN7QSkSopA9L-0-b07d3a671f1c7ccf4763c9343e9bdba0)
视图层代码如下。
![](https://epubservercos.yuewen.com/F2C35D/26581507309218206/epubprivate/OEBPS/Images/Figure-P20_9393.jpg?sign=1738886736-g5oFoaV6nItrWcYk7eeMczQJv8dpAULl-0-88c061083245a1fcf521581649e1a3e8)
运行代码,发现用两种方式渲染数据的运行结果相同,如图1-4所示。
![](https://epubservercos.yuewen.com/F2C35D/26581507309218206/epubprivate/OEBPS/Images/Figure-P20_7018.jpg?sign=1738886736-GjZk9KYtyuFB6hyRbgva9RtQ7MjSArQB-0-95f571e48d212268f4145bba05cc0dc2)
图1-4 插值表达式渲染和v-text指令渲染的运行结果
1.5.3 v-html指令
作用:渲染富文本。
1.5.2节讲解的v-text指令只能渲染普通的字符串,而不能渲染复杂数据(如富文本)。本节讲解用v-html指令渲染富文本,代码如下。
M层代码如下。
![](https://epubservercos.yuewen.com/F2C35D/26581507309218206/epubprivate/OEBPS/Images/Figure-P21_9395.jpg?sign=1738886736-KBOIe7Bt8JPPfcQSanr1xOaXUFz2GpWb-0-25dfea68b785b0e2478bd9a1edbaa71b)
视图层代码如下。
![](https://epubservercos.yuewen.com/F2C35D/26581507309218206/epubprivate/OEBPS/Images/Figure-P21_9397.jpg?sign=1738886736-fhmRfaqFXsPEDxtFcxl4jjzCyf3QBUHM-0-52fe3696ba9bbebdef8c87c73dc67d6c)
运行代码,发现M层中msg属性的h1标签会被解析,如图1-5所示。
![](https://epubservercos.yuewen.com/F2C35D/26581507309218206/epubprivate/OEBPS/Images/Figure-P21_7028.jpg?sign=1738886736-lT6lLPhABhpnPJsh65m2gHA9EfoYi2X9-0-767033b9ce8b4555027e71b159db3a7f)
图1-5 v-html渲染结果
下面总结一下插值表达式、v-text、v-html的相同点和不同点。
相同点:都可以渲染M层中的数据。
不同点:(1)插值表达式和v-text不能渲染富文本。
(2)v-text和v-html在视图层不能继续添加文本内容,而插值表达式可以继续添加文本。
下面通过插值表达式、v-text、v-html进行渲染,代码如下。
![](https://epubservercos.yuewen.com/F2C35D/26581507309218206/epubprivate/OEBPS/Images/Figure-P21_9398.jpg?sign=1738886736-YoS5hauS09FmOR14VwDX7Nix1adrPfBf-0-4c4e7b5bde0487bc48d366dfd9502265)
运行结果如图1-6所示。
![](https://epubservercos.yuewen.com/F2C35D/26581507309218206/epubprivate/OEBPS/Images/Figure-P22_7037.jpg?sign=1738886736-yX3gC27zBQXm5VT9eXY9KUIB5XdpnSMl-0-ad2b90c420a2f1bf4ce97977fc6f15f3)
图1-6 插值表达式、v-text、v-html渲染结果
结论:只有插值表达式中的文本可以正常显示,使用v-text和v-html渲染的数据会覆盖原标签中的内容。
1.5.4 v-bind指令
作用:元素属性绑定。
v-bind是比较重要的一个指令,用于元素的属性绑定。以上几节中M层的数据直接渲染到元素中,本节讲解的是把M层的数据渲染到元素的属性中,例如div有title属性,把M层数据渲染到title属性中,代码如下。
M层代码如下。
![](https://epubservercos.yuewen.com/F2C35D/26581507309218206/epubprivate/OEBPS/Images/Figure-P22_9399.jpg?sign=1738886736-Per4mrvDLA5IVgGoe7S17jFrXZmzuQkL-0-1243ecfce529230ab3ae9f75cf260445)
视图层代码如下。
![](https://epubservercos.yuewen.com/F2C35D/26581507309218206/epubprivate/OEBPS/Images/Figure-P22_9400.jpg?sign=1738886736-hKNSm0eHtsiC8jE528xFYZ49eq0Z8tos-0-00136f087b101e1c38e1d35eec8b3281)
此时当鼠标移动到div元素,title属性显示的是字符串“msg”,并不能渲染M层的“Hello World”,运行结果如图1-7所示。
![](https://epubservercos.yuewen.com/F2C35D/26581507309218206/epubprivate/OEBPS/Images/Figure-P23_7051.jpg?sign=1738886736-O1UTmoS3RpQxci2EoYQKGkfSba7JKphC-0-5883ac8a0840119241acc017c2901b52)
图1-7 title属性渲染结果1
正确的做法应该是使用v-bind指令绑定属性,代码如下。
![](https://epubservercos.yuewen.com/F2C35D/26581507309218206/epubprivate/OEBPS/Images/Figure-P23_9402.jpg?sign=1738886736-OIpyeNYHjffmMCAnCS51FZtgZmpwYCQ2-0-6c61c54aadee40e655b7d861c1131b84)
运行结果如图1-8所示。
![](https://epubservercos.yuewen.com/F2C35D/26581507309218206/epubprivate/OEBPS/Images/Figure-P23_7055.jpg?sign=1738886736-RjyCTpYWvbWYkiWGUBXxMv9CnFZA7Zho-0-95e35d0384ad00fc17c536a84b66ee50)
图1-8 title属性渲染结果2
注意:
当元素中的属性使用了v-bind指令时,后面的值就是变量,Vue会到M层中找这个变量,若找到了就渲染内容,若找不到就会报错。
常用的属性绑定还有img标签中的src属性、a标签中的href属性等,代码如下。
M层代码如下。
![](https://epubservercos.yuewen.com/F2C35D/26581507309218206/epubprivate/OEBPS/Images/Figure-P23_9404.jpg?sign=1738886736-hFu0CykXOokx9EhJVu9mfCrnP7ZBHXbN-0-799c727bfa01cbd18ec4a39fd411fa8a)
视图层代码如下。
![](https://epubservercos.yuewen.com/F2C35D/26581507309218206/epubprivate/OEBPS/Images/Figure-P24_9406.jpg?sign=1738886736-YH916bvbivjFSUDvP64qNAIJlXdX16c4-0-a75db987930949f732770e5e3666fb3d)
注意:
v-bind可以简写成“:”,所以上述代码中的src属性和href属性可以分别简写为“:src”和“:href”,代码如下。
![](https://epubservercos.yuewen.com/F2C35D/26581507309218206/epubprivate/OEBPS/Images/Figure-P24_9408.jpg?sign=1738886736-eAkLSlCUAb3tjtrsFKtnkCOIQI8JzBUz-0-ffa72da268e14774e15b5f1831c424ea)
1.5.5 v-on指令
作用:元素事件绑定。
v-on指令同样是Vue中的重要指令,用于元素事件的绑定,现在有一个简单的需求,单击“单击”按钮时,控制台输出“Hello World”,原生的JS代码如下。
视图层代码如下。
![](https://epubservercos.yuewen.com/F2C35D/26581507309218206/epubprivate/OEBPS/Images/Figure-P24_9410.jpg?sign=1738886736-FOn8sRFB1JbkV6L2KUZ2v0uX6eRQMVX4-0-14b452d0c3c8db92d79650a5e028aa90)
JS代码如下。
![](https://epubservercos.yuewen.com/F2C35D/26581507309218206/epubprivate/OEBPS/Images/Figure-P24_9412.jpg?sign=1738886736-PtxKH9ScI8Ml114esRjR36wJLtv1qSiv-0-a67ef6cb71711f3aa3448449913303fe)
当单击“单击”按钮时,控制台可正常输出“Hello World”,但是上述代码有个缺点,即其功能是通过操作DOM元素实现的,这和Vue的理念冲突,Vue不建议操作DOM元素,所以应该使用v-on事件绑定指令,代码如下。
视图层代码如下。
![](https://epubservercos.yuewen.com/F2C35D/26581507309218206/epubprivate/OEBPS/Images/Figure-P25_9414.jpg?sign=1738886736-zN8jkz5fJ0MyeJbVQWI7X8VHkskCYPPJ-0-3930acbae70ee9dc5518e5e8e1f20084)
JS代码如下。
![](https://epubservercos.yuewen.com/F2C35D/26581507309218206/epubprivate/OEBPS/Images/Figure-P25_9416.jpg?sign=1738886736-sQFSkbFBUb42Jp3Tng1rL431k1e7AHvE-0-448238dccaac9c001620f949017e3ea3)
单击“单击”按钮时,控制台同样会输出“Hello World”,这一次我们并没有操作DOM元素。分析上述代码,发现在配置对象中新增了methods属性,methods属性用来存放方法。
视图层中,通过v-on指令给按钮绑定了单击事件。当单击按钮时,会到methods属性中找show方法,若找到show方法就执行,若找不到show方法就报错。
本节的重点是要理解methods属性是用来存放方法的,v-on是用来绑定事件的。
除了单击事件,常见的事件还有鼠标移动事件,下面将上述案例的需求修改成:当鼠标经过按钮时,控制台输出“Hello World”,代码如下。
视图层代码如下。
![](https://epubservercos.yuewen.com/F2C35D/26581507309218206/epubprivate/OEBPS/Images/Figure-P25_9418.jpg?sign=1738886736-Oa6OfwrGuObmfVGLC7gZ83TgnSPLqUeo-0-bb4b7882a098e1ee0d27728414ada45e)
JS代码如下。
![](https://epubservercos.yuewen.com/F2C35D/26581507309218206/epubprivate/OEBPS/Images/Figure-P25_9420.jpg?sign=1738886736-EtkexizPKMUYoGtIpiav1HwS8ynUVHqS-0-5c91c87fef49727238ba5c8de06bc886)
注意:
从上述代码可以看出,v-on指令可以简写成“@”。