![Vue.js企业开发实战](https://wfqqreader-1252317822.image.myqcloud.com/cover/909/44509909/b_44509909.jpg)
第2章 Vue内置指令
2.1 基本指令
2.1.1 v-text与v-html
v-text与v-html指令都可以用来更新页面元素的内容,但是二者也有不同点,v-text输出的数据是以字符串形式显示的,而v-html不仅可以输出字符串形式的数据,而且可以渲染字符串中的HTML标签。
index.html文件代码如下:
![](https://epubservercos.yuewen.com/85E887/23721628409520006/epubprivate/OEBPS/Images/Figure-P28_26313.jpg?sign=1738881368-b8I4EnxyCEbBxseKb7FHlvDymxbJCaHI-0-f5a0a5ff28bb14dc87711906d626e642)
在浏览器中运行的效果如图2.1所示。
![](https://epubservercos.yuewen.com/85E887/23721628409520006/epubprivate/OEBPS/Images/Figure-P28_24403.jpg?sign=1738881368-yWXVIZ4YPUZ5LxhpL9txUGJVyjsBeEBD-0-d3a317857a648d6bb6c1f7941b2b7794)
图2.1 v-text与v-html指令运行效果
2.1.2 v-bind
v-bind可以用来绑定标签的属性,例如:<img>标签的srcs属性,<a>标签的title属性等。使用v-bind绑定的属性值应该为一个JavaScript的变量,或者是JavaScript表达式。
index.html文件代码如下:
![](https://epubservercos.yuewen.com/85E887/23721628409520006/epubprivate/OEBPS/Images/Figure-P29_26315.jpg?sign=1738881368-6Nbv1yFNQrmz4VdfJ7Wf4mK3dtF77bK6-0-2a15f13f088bac6fa649c4e1a759b6d0)
在浏览器中运行的效果如图2.2所示。
![](https://epubservercos.yuewen.com/85E887/23721628409520006/epubprivate/OEBPS/Images/Figure-P29_3207.jpg?sign=1738881368-oAYNpSWrOGvwu31O6D2OqpnvwKLS2Eyi-0-651c971afb9a71c202431f4414bbf2e1)
图2.2 v-bind指令运行效果
上面的代码示例中,对<a>标签的title属性使用v-bind进行绑定,title的值为Vue实例中的titleText变量,当鼠标指针悬停在<a>标签渲染的元素上时,会显示动态的titleText属性的值。
2.1.3 v-once
v-once指令只渲染元素和组件一次,随后的渲染,如果使用了此指令的元素、组件及其所有子节点,则都会当作静态内容并跳过。这个特性可以用于优化更新性能。
index.html文件代码如下:
![](https://epubservercos.yuewen.com/85E887/23721628409520006/epubprivate/OEBPS/Images/Figure-P30_26318.jpg?sign=1738881368-hsCijnv9kLMwWD5JRDUzLAAuPKTuqFmX-0-4940018cdc27fabf01f47c500c731fde)
在浏览器中运行的效果如图2.3所示。
![](https://epubservercos.yuewen.com/85E887/23721628409520006/epubprivate/OEBPS/Images/Figure-P30_4111.jpg?sign=1738881368-gwLst2Yb0WU8GYrkElLDgLQgKx6xzDOG-0-f0dddbedc7eb0c5384b43a7612d497fd)
图2.3 v-once指令运行效果
运行上面的示例代码,当打开浏览器页面时,DOM元素中的{{message}}渲染了message属性的值,当使用v-model绑定的输入框再次改变message属性的值时,添加了v-once指令的标签则没有发生任何变化。
2.1.4 v-cloak
v-cloak指令将会保持在DOM元素上,直到关联实例结束编译后自动移除。v-cloak指令的使用场景非常有限,常用于解决网络较慢时数据的加载问题。用户在访问Vue.js实现的网站时,如果网络延迟,网页还在加载Vue.js,便会导致Vue来不及渲染,这时页面就会显示出Vue源代码,我们就可以使用v-cloak指令来解决这一问题。
index.html文件代码如下:
![](https://epubservercos.yuewen.com/85E887/23721628409520006/epubprivate/OEBPS/Images/Figure-P30_26321.jpg?sign=1738881368-exHmG7vSJJN0NqvTO4iosPPeNZNcgJ4p-0-6be9e40a35b74d5363f4b3b25557a1aa)
当网络较慢时,在浏览器中打开页面,此时会在页面中出现Vue源码,直到Vue.js加载完成并编译之后,才会显示正常的数据内容,如图2.4所示。
![](https://epubservercos.yuewen.com/85E887/23721628409520006/epubprivate/OEBPS/Images/Figure-P31_4172.jpg?sign=1738881368-FT2D7INoknNOPijRSKOZwI0Qd0CCxXGI-0-08e45cfb9b1db2b6b9b04f6bf83da32f)
图2.4 Vue未完成编译的页面显示效果
为了解决上面代码运行的问题,我们可以为DOM元素添加v-cloak指令,并使用属性选择器为指定的DOM元素设置隐藏样式。v-cloak指令可以保持在DOM元素上,直到编译结束才自动移除,这样就可以在Vue完成编译之前使指定的DOM元素处于隐藏状态,等编译完成后,CSS样式就对该DOM元素无效了。
index.html文件代码如下:
![](https://epubservercos.yuewen.com/85E887/23721628409520006/epubprivate/OEBPS/Images/Figure-P31_26323.jpg?sign=1738881368-nLZ9FjKpNvYVQbtt5TqQ7bV7R2guArtY-0-6f3a8b173b9d81958549738173182d5d)
2.1.5 v-pre
v-pre指令会跳过这个元素和它的子元素的编译过程,所以可以用来显示原始Mustache标签。跳过大量没有指令的节点会加快编译,代码如下:
![](https://epubservercos.yuewen.com/85E887/23721628409520006/epubprivate/OEBPS/Images/Figure-P31_26325.jpg?sign=1738881368-5a3Nby1hMX8PDmWbL2hCoAV2bZKmXgw6-0-6d4f646c09364840c676b3950f88823c)
在浏览器中运行的效果如图2.5所示。
![](https://epubservercos.yuewen.com/85E887/23721628409520006/epubprivate/OEBPS/Images/Figure-P32_24430.jpg?sign=1738881368-wZh61miuMLCq1NL3arxESvd2scV1n4wI-0-65a10db7d9c5c4b145b30786b47399d9)
图2.5 v-pre指令运行效果