看一段vue入门代码
<script>
var vm = new Vue({
el:'#app',
data:{
msg:'hello vanjs',
msg2:'<h1>你好啊</h1>'
}
});
</script>
#app
声明作用域,data中的数据绑定需要用在#app
下才能生效。
如上vue代码,在data中给msg变量赋值后,如何绑定到html的元素中呢?
1.插值表达式 {{ }}
<div id='app'>
<h1>{{msg}}</h1>
</div>
直接使用插值表达式,在网络不佳或加载慢的时候会有闪烁问题(直接显示 {{msg}}
).
如何解决这个问题呢?可以使用 v-cloak
或 v-text
。
2.v-cloak
<h1 v-cloak>{{msg}}</h1>
<style>
[v-cloak]{
display: none;
}
</style>
v-cloak
需要配合插值表达式{{msg}}
和css样式 display: none;
使用。在{{msg}}
数据未加载时,display: none;
起作用,隐藏元素;数据加载后,元素的v-cloak
属性消失,元素显示,且数据显示正常。
3.v-text
<h1 v-text='msg'></h1>
v-text
这样就能解决闪烁问题,似乎比v-cloak
更方便。
不同点:插值表达式支持字符拼接。
<h1>...{{msg}}...</h1>
不过这可以通过下面的代码实现相同的功能:
<h1>...<span v-text='msg'></span>...</h1>
v-cloak
和 v-text
都会把变量的内容直接填充,不会转义html元素。如果需要转义html元素,需要用到 v-html
4.v-html
<div v-text='msg2'></div>
<div v-html='msg2'></div>
效果图如下,可以看到两者区别。