![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=1738849132-ayxYfnLMPt9iHnsSA27c9I2ldmQ9dpxZ-0-5b730ea56959800a30640700eddc5ad7)
图1-3 Vue数据渲染之前
当网速过慢时,浏览器显示的是Vue的源代码,对于用户来说,这是一种不友好的展现形式。所以在实现Vue项目之前,我们需要使用v-cloak指令,代码如下。
![](https://epubservercos.yuewen.com/F2C35D/26581507309218206/epubprivate/OEBPS/Images/Figure-P18_9388.jpg?sign=1738849132-mDcA2akAH1XyMH5SyhhDRvuk02hE5srN-0-b81e8b294a671b281e3fa90b284c2dd0)
上述代码有两处注释。
(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=1738849132-vUSBGcNo8kZMqfujCZJYjA1ZKMnBSR2u-0-8ef1e76e5ffee53b50b186259fab6ac5)
视图层代码如下。
![](https://epubservercos.yuewen.com/F2C35D/26581507309218206/epubprivate/OEBPS/Images/Figure-P20_9393.jpg?sign=1738849132-33iVc9ewR9lyq96u6EBS2a4Lavc2zD0V-0-bfc0512376da4f92d350a287bf4c387a)
运行代码,发现用两种方式渲染数据的运行结果相同,如图1-4所示。
![](https://epubservercos.yuewen.com/F2C35D/26581507309218206/epubprivate/OEBPS/Images/Figure-P20_7018.jpg?sign=1738849132-aGqNLHeeKY4cVeu4kJTaFbvhXz9FzIA7-0-868d74c7c61e027b7aad58dfdc74ec0a)
图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=1738849132-tToSdnSFLHENQ0hqjg0snPrWM41oHspw-0-7e33cd923ab8534423ef7969ab73c626)
视图层代码如下。
![](https://epubservercos.yuewen.com/F2C35D/26581507309218206/epubprivate/OEBPS/Images/Figure-P21_9397.jpg?sign=1738849132-FlTvOE3l3T7eCkCLcbg9Z6yay2MiZbo8-0-43804225b91b001e64c9f22e111d3e02)
运行代码,发现M层中msg属性的h1标签会被解析,如图1-5所示。
![](https://epubservercos.yuewen.com/F2C35D/26581507309218206/epubprivate/OEBPS/Images/Figure-P21_7028.jpg?sign=1738849132-hDHRxn58LOoibPBVNOvesR4VznlOVO6V-0-c785c80d3a70249836429aa8b2f5c013)
图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=1738849132-kvBMQSWAZIEb1ttHT2IWMrv2vCkdENcx-0-6523c093b9ad1acf0a2ceff94d6b3d2f)
运行结果如图1-6所示。
![](https://epubservercos.yuewen.com/F2C35D/26581507309218206/epubprivate/OEBPS/Images/Figure-P22_7037.jpg?sign=1738849132-bYciH7o8otJ90Z252NlXPHS8g2dEqikz-0-678b7aa10717479f4accc858c9aac6c9)
图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=1738849132-0OsQbCypl60v5PE0I5fKmU5Ynalao8Te-0-16b0249ed89560b0d61f42c3db00a84e)
视图层代码如下。
![](https://epubservercos.yuewen.com/F2C35D/26581507309218206/epubprivate/OEBPS/Images/Figure-P22_9400.jpg?sign=1738849132-FAeXPMjXdgnBPNu6B1jP6KAr4oPZ5e2L-0-7d187d577240f22a146b9bc4c92f8d80)
此时当鼠标移动到div元素,title属性显示的是字符串“msg”,并不能渲染M层的“Hello World”,运行结果如图1-7所示。
![](https://epubservercos.yuewen.com/F2C35D/26581507309218206/epubprivate/OEBPS/Images/Figure-P23_7051.jpg?sign=1738849132-tPR6TgQVIAUt9ZyGTk5WoUcHPA2uvGWw-0-2d06a47bd7861275342ee2cb3ca2ec09)
图1-7 title属性渲染结果1
正确的做法应该是使用v-bind指令绑定属性,代码如下。
![](https://epubservercos.yuewen.com/F2C35D/26581507309218206/epubprivate/OEBPS/Images/Figure-P23_9402.jpg?sign=1738849132-IsvWcHdyDydYYHLht4DgmYei42hgrpO3-0-1c9eb58068462e463a58292626976f6f)
运行结果如图1-8所示。
![](https://epubservercos.yuewen.com/F2C35D/26581507309218206/epubprivate/OEBPS/Images/Figure-P23_7055.jpg?sign=1738849132-4IGtOmd82y5YapBUropEoi2d6SLexStI-0-c7005c22dfaae939cf7a6150828f0584)
图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=1738849132-NSIMFMi1eNdonCDtsfM5xe5VBQGE52qD-0-c6f973ce69fca2b7f63e420a73d82ef0)
视图层代码如下。
![](https://epubservercos.yuewen.com/F2C35D/26581507309218206/epubprivate/OEBPS/Images/Figure-P24_9406.jpg?sign=1738849132-MrSQzb0JGSKang5vbKIayv4ZoPVspgV9-0-c38a762dc6d06fdb8831a1aa35b593c1)
注意:
v-bind可以简写成“:”,所以上述代码中的src属性和href属性可以分别简写为“:src”和“:href”,代码如下。
![](https://epubservercos.yuewen.com/F2C35D/26581507309218206/epubprivate/OEBPS/Images/Figure-P24_9408.jpg?sign=1738849132-zfRNvrXamF6UJGM711OFT2pxvtIYBdGX-0-fc5b9982f22ac5ce58c6abd851c34f7b)
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=1738849132-L9zz8bj6jWVNBkq4uUjN8weWIcnmkzMN-0-eb7a5187e39696717cbb352988fd35bd)
JS代码如下。
![](https://epubservercos.yuewen.com/F2C35D/26581507309218206/epubprivate/OEBPS/Images/Figure-P24_9412.jpg?sign=1738849132-tAORif2YTdhJUFKj7A9pYinqVcZ81RTn-0-f6d76ca00787acc0ff42c543c76a3014)
当单击“单击”按钮时,控制台可正常输出“Hello World”,但是上述代码有个缺点,即其功能是通过操作DOM元素实现的,这和Vue的理念冲突,Vue不建议操作DOM元素,所以应该使用v-on事件绑定指令,代码如下。
视图层代码如下。
![](https://epubservercos.yuewen.com/F2C35D/26581507309218206/epubprivate/OEBPS/Images/Figure-P25_9414.jpg?sign=1738849132-9vfUn4RENzzImfnQBpGxH3LMr5ggj9vq-0-5550299cb618e0d7c04ced64af08c953)
JS代码如下。
![](https://epubservercos.yuewen.com/F2C35D/26581507309218206/epubprivate/OEBPS/Images/Figure-P25_9416.jpg?sign=1738849132-0PNLoSFD0GS8917XS4o4xlWKLNYhOGOq-0-2a02ca998db5f2152f19180eb3467adc)
单击“单击”按钮时,控制台同样会输出“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=1738849132-raN8hxOFZGJQJydBMdRCBmOuj3abaJP6-0-2d0873981d03a4ba549e9441f49d19c6)
JS代码如下。
![](https://epubservercos.yuewen.com/F2C35D/26581507309218206/epubprivate/OEBPS/Images/Figure-P25_9420.jpg?sign=1738849132-0egV7wsGbwL3dsLZS6CJ2PuN2GmCk3xt-0-62fd09e86ff78f9ec836807da22c0af0)
注意:
从上述代码可以看出,v-on指令可以简写成“@”。