![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=1739507376-Sfl1OinINRB2aGwNkcewzNkBxYNeI97v-0-44d7455ebd0c396e8fe7809850d80912)
图1-3 Vue数据渲染之前
当网速过慢时,浏览器显示的是Vue的源代码,对于用户来说,这是一种不友好的展现形式。所以在实现Vue项目之前,我们需要使用v-cloak指令,代码如下。
![](https://epubservercos.yuewen.com/F2C35D/26581507309218206/epubprivate/OEBPS/Images/Figure-P18_9388.jpg?sign=1739507376-bAnpx7WMS8DHfUuivFXGRVdqca8QihTD-0-f22b787f7779aff91e4f2ef29b404ef6)
上述代码有两处注释。
(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=1739507376-KrRDwfPtDWU8QvLmRMtez3Vwj73AWMLi-0-46623c1b3b0b301280ba47ca15295415)
视图层代码如下。
![](https://epubservercos.yuewen.com/F2C35D/26581507309218206/epubprivate/OEBPS/Images/Figure-P20_9393.jpg?sign=1739507376-ArSbeMdBPN3YmrCTsLmwv8Kl2mCQZ8Pp-0-7c0ba018ad0e6edcd561b17f312fe07f)
运行代码,发现用两种方式渲染数据的运行结果相同,如图1-4所示。
![](https://epubservercos.yuewen.com/F2C35D/26581507309218206/epubprivate/OEBPS/Images/Figure-P20_7018.jpg?sign=1739507376-FEAn25QitM7XAYOzvLZUBqlgF3VPrezq-0-ece21f8a44f246d3df1512054e5a1bde)
图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=1739507376-dUjpQrvsi2UA0Jqb0YIqSWTCzLQRcyKS-0-edddc3a9d945bc35b61ebc44d52c30e1)
视图层代码如下。
![](https://epubservercos.yuewen.com/F2C35D/26581507309218206/epubprivate/OEBPS/Images/Figure-P21_9397.jpg?sign=1739507376-7JdnCkVcrNO9FKnOUuDbFKQ5627XAPyZ-0-871c9147512ff8b3213812b94978feb7)
运行代码,发现M层中msg属性的h1标签会被解析,如图1-5所示。
![](https://epubservercos.yuewen.com/F2C35D/26581507309218206/epubprivate/OEBPS/Images/Figure-P21_7028.jpg?sign=1739507376-XYTOExbvJ6xHDIkPbDLLbHvqiwAvYJ0j-0-97980d777b8ce924a038c0be673c8200)
图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=1739507376-98AZrnZfFHzZUrY8B0tHyx39Q8fIijDN-0-ea40bb4af85bde322ba6f3401c5da8e0)
运行结果如图1-6所示。
![](https://epubservercos.yuewen.com/F2C35D/26581507309218206/epubprivate/OEBPS/Images/Figure-P22_7037.jpg?sign=1739507376-YGyHdJtl1FQERjmQ5MIgolnIlEPNR6t9-0-64e46a28734bb0f1aad5deaf3f72d6c3)
图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=1739507376-JiBv0koup4wttSGvdwmRtrHvf47GbtsQ-0-b82619d8ed6d319844569d1366c74444)
视图层代码如下。
![](https://epubservercos.yuewen.com/F2C35D/26581507309218206/epubprivate/OEBPS/Images/Figure-P22_9400.jpg?sign=1739507376-ndhfTdnB3kFCD4d1VIv08znYkPPbLamt-0-0ce66de7a8b934e9ec2cad3fcfa52387)
此时当鼠标移动到div元素,title属性显示的是字符串“msg”,并不能渲染M层的“Hello World”,运行结果如图1-7所示。
![](https://epubservercos.yuewen.com/F2C35D/26581507309218206/epubprivate/OEBPS/Images/Figure-P23_7051.jpg?sign=1739507376-yOdIZF8cYwIxcBA3LC3TQVX7qsGHiWCW-0-c405c37ef7bd9c9fe410753fe88c6f71)
图1-7 title属性渲染结果1
正确的做法应该是使用v-bind指令绑定属性,代码如下。
![](https://epubservercos.yuewen.com/F2C35D/26581507309218206/epubprivate/OEBPS/Images/Figure-P23_9402.jpg?sign=1739507376-U99DqHyecREThIYDtX4crp6IpfeCfqYD-0-149879a6d277e377f8f3760bbb979983)
运行结果如图1-8所示。
![](https://epubservercos.yuewen.com/F2C35D/26581507309218206/epubprivate/OEBPS/Images/Figure-P23_7055.jpg?sign=1739507376-o0SzUqfQIe5H2L2uiOIVei4j9Jop8mi7-0-df990eddd0954bd38ea51f4270b14901)
图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=1739507376-IUAVceTiTMGO5rzOiAmtTcCSOvKXJo2U-0-a7d09ba78a9c9ddb08eb5ae24d56c597)
视图层代码如下。
![](https://epubservercos.yuewen.com/F2C35D/26581507309218206/epubprivate/OEBPS/Images/Figure-P24_9406.jpg?sign=1739507376-WzyEaSFKjHxoXqITM3uhWqHOVG0cAOOL-0-09bb3c24e28e229200321cd39bda2916)
注意:
v-bind可以简写成“:”,所以上述代码中的src属性和href属性可以分别简写为“:src”和“:href”,代码如下。
![](https://epubservercos.yuewen.com/F2C35D/26581507309218206/epubprivate/OEBPS/Images/Figure-P24_9408.jpg?sign=1739507376-fjTw5SyYanTA17bAn07ZRcrrXRcHDv93-0-cfcaf238befa28bcfa5fd1319a6be9ec)
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=1739507376-pyUFWMQyXdsEb1TpJnYOA4mGjlc2xGQq-0-304141c463cbc53fbd7f9e98f8cd5e29)
JS代码如下。
![](https://epubservercos.yuewen.com/F2C35D/26581507309218206/epubprivate/OEBPS/Images/Figure-P24_9412.jpg?sign=1739507376-nN8rZ7C9vGsbdWEWr78QiM8DhMWfux0F-0-f38ec8536193e085c852264854468296)
当单击“单击”按钮时,控制台可正常输出“Hello World”,但是上述代码有个缺点,即其功能是通过操作DOM元素实现的,这和Vue的理念冲突,Vue不建议操作DOM元素,所以应该使用v-on事件绑定指令,代码如下。
视图层代码如下。
![](https://epubservercos.yuewen.com/F2C35D/26581507309218206/epubprivate/OEBPS/Images/Figure-P25_9414.jpg?sign=1739507376-abJ1wJRKqRTDjZb4WHmBr5ixAeDeXd9V-0-f90b3e028fa96e199e4a1e89fb3a4863)
JS代码如下。
![](https://epubservercos.yuewen.com/F2C35D/26581507309218206/epubprivate/OEBPS/Images/Figure-P25_9416.jpg?sign=1739507376-Q88S3dtOjaKsf6GnXMhcNPAPIgZVx0m4-0-21993bc193f92ca9cf19683d58e2ab64)
单击“单击”按钮时,控制台同样会输出“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=1739507376-DsvmeXCdWWrBxGRAPGZEfi6icq782rgr-0-13a8a26272e807396235f28e59a23744)
JS代码如下。
![](https://epubservercos.yuewen.com/F2C35D/26581507309218206/epubprivate/OEBPS/Images/Figure-P25_9420.jpg?sign=1739507376-AbiIDLaCK1Ozr5mnsnG8hutLTtXTGmw7-0-ea99330c11a5c9b6739c0b075d46059c)
注意:
从上述代码可以看出,v-on指令可以简写成“@”。