Mustache
如何将data中的文本数据,插入到HTML中呢?
之前文章中已经讲过,可以通过Mustache语法(也就是双大括号)。
Mustache:胡须,因为左右两个大括号像两个胡须一样,这是国外人的翻译,在国内也可以叫双大括号
我们可以像下面这样来使用,并且数据是响应式的。
<div id="app">
<h1>{{message}}</h1>
</div>
<script type="text/javascript">
var vue = new Vue({
el:'#app',
data:{
message:'simple'
}
})
</script>
v-once
在某些情况下,我们可能不希望界面随意的跟随改变,这个时候,我们就可以使用一个Vue命令
v-once:
- 该指令后面不需要跟任何表达式(比如v-for后面是有跟表达式的)
- 该指令表示元素和组件(组件后面会写)只渲染一次,不会随着数据的改变而改变。
代码如下:
<div id="app">
<h1>{{message}}</h1>
<h1 v-once>{{message}}</h1>
</div>
<script type="text/javascript">
var vue = new Vue({
el:'#app',
data:{
message:'hello world'
}
})
</script>
v-html
某些情况下,我们从服务器请求的数据本身就是一个HTML代码
如果我们直接通过{{}}来输出,会将HTML代码也一起输出,但是我们可能希望的是按照HTML格式进行解析,并且显示对应的内容。
如果我们希望解析出HTML展示
可以使用v-html
指令,在该指令后面往往会跟上一个string
类型,会将string
的html
解析出来并且进行渲染
<div id="app">
<h1>{{link}}</h1>
<h1 v-html="link"></h1>
</div>
<script type="text/javascript">
var vue = new Vue({
el:'#app',
data:{
link:'<a href="https://www.baidu.com">百度一下</a>'
}
})
</script>
v-text
v-text作用和Mustache比较相似,都是用于数据显示在界面中,v-text通常情况下,接受一个string
类型
<div id="app">
<h1 v-text="name"></h1>
<!-- 如果使用了v-text指令,那么我们在标签中写入的内容将会被覆盖,所以它并不是特别灵活 -->
<!-- <h1 v-text="name">,你好</h1> -->
<h1>{{name}}</h1>
</div>
<script type="text/javascript">
var vue = new Vue({
el:'#app',
data:{
name:'simple'
}
})
</script>
v-pre
v-pre用于跳过这个元素和它之元素的编译过程,用于显示原本的Mustache语法,比如下面的代码:
- 第一个h1元素中的内容会被编译解析出来
- 第二个h1元素中会直接显示{{message}}
<div id="app">
<h1>{{message}}</h1>
<h1 v-pre>{{message}}</h1>
</div>
<script type="text/javascript">
var vue = new Vue({
el:'#app',
data:{
message:'simple'
}
})
</script>
v-cloak
在某些情况下, 我们浏览器可能会直接显示出未编译的Mustache标签。
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<script src="../vue.js"></script>
<style>
[v-cloak]{
display: none;
}
</style>
</head>
<body>
<!-- v-once:当页面加载完只把我的数据第一次展示出来就可以了,后面数据改变不改变页面数据 -->
<div id="app">
<h1 v-cloak>{{message}}</h1>
</div>
<script type="text/javascript">
// 延时1秒钟加载数据
// 在vue解析之前,div中有一个属性v-cloak
// 在vue解析之后,div中没有属性v-cloak
setTimeout(function(){
var vue = new Vue({
el:'#app',
data:{
message:'simple'
}
})
},1000)
</script>
</body>
</html>