Vue中插值表达式,v-text和v-html三者区别

概述

我们在学习vue的过程中,对指令的学习是必不可少的,下面结合自己工作和学习的一点经验介绍下vue中插值表达式,v-text和v-html三者的区别

插值表达式

我们知道页面的加载是自上而下的,js加载是同步的。当页面刷新比较频繁或者网速较慢的时候,我们使用插值表达式页面会先出现‘{ {message}}’,再用真实数据替换‘{ {message}}’(模拟这种现象可以将vue.js的引入放在body的后面,或者调整网络请求的速度为3G)
在这里插入图片描述

<!--这是我们的View-->
<div id="app">
	<p>{
   
   {message}}</p>
</div>
new Vue({
    
    
    el: '#app',
    data: {
    
    
		message:"hello world!",
	}
})

在这里插入图片描述
在这里插入图片描述

解决上述问题的办法v-cloak,这个指令可以隐藏未编译的标签直到实例准备完毕。不会显示,直到编译结束。

<div id="app">
	<p v-cloak>{
   
   {message}}</p>
</div>
<style>
	[v-cloak]{
     
     
		display: none;
	}
</style>

此时我们去访问页面时候不再会出现‘{ {message}}’,当Vue数据传递完成时,会正确显示数据。

v-text

<div id="app">
	<p v-cloak>{
   
   {message}}</p>
	<p v-text="message"></p>
</div>

显示效果与插值表达式一样,并且还不会出现‘{ {message}}’闪烁现象,那么就有同学就要问有了v-text为什么还要插值表达式?通过下面代码为大家讲述两者区别:

<div id="app">
	<p v-cloak>你好世界:{
   
   {message}}</p>
	<p v-text="message">你好世界:</p>
</div>

运行结果:
在这里插入图片描述

结论:插值表达式相当于一个占位符,只会替换掉其中的占位置的内容,v-text只能显示Vue对象传递过来的数据,会替换掉节点里已有的内容。

v-html

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
		<style>
			[v-cloak]{
     
     
				display: none;
			}
		</style>
		  <script src="js/vue.js"></script>
    </head>
 
    <body>
        <!--这是我们的View-->
        <div id="app">
			<p v-cloak>{
   
   {message}}</p>
			<p v-text="message"></p>
			<p v-html="message"></p>
        </div>
    </body>

    <script>
        new Vue({
     
     
            el: '#app',
            data: {
     
     
				message:"<h1>Hello World!</h1>",
			}
        })
    </script>
</html>

运行结果:
在这里插入图片描述

结论:插值表达式和v-text不能够解析html标签,v-html能够解析html标签

总结

  1. 如果只是单独展示Vue对象里的数据,建议使用“v-text”指令。
  2. 如果要同时展示用户前台数据,那么就需要用插值表达式,但是不要忘记和“v-cloak”属性一起使用(同时需要设置样式[v-cloak]{display:none;})。
  3. 如果Vue对象传递过来的数据含有HTML标签,则使用v-html

猜你喜欢

转载自blog.csdn.net/m0_46864744/article/details/113015345