# 1. Mustache语法 ​ mustache是胡须的意思,因为`{{}}`像胡须,又叫大括号语法。 ​ 在vue对象挂载的dom元素中,`{{}}`不仅可以直接写变量,还可以写简单表达式。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Mustache的语法</title>
</head>
<body>
<div id="app">
<h2>&#123;&#123;message&#125;&#125;</h2>
<h2>&#123;&#123;message&#125;&#125;,啧啧啧</h2>

<!-- Mustache的语法不仅可以直接写变量,还可以写简单表达式 -->
<h2>&#123;&#123;firstName + lastName&#125;&#125;</h2>
<h2>&#123;&#123;firstName + " " + lastName&#125;&#125;</h2>
<h2>&#123;&#123;firstName&#125;&#125;&#123;&#123;lastName&#125;&#125;</h2>
<h2>&#123;&#123;count * 2&#125;&#125;</h2>
</div>
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/vue.js"></script>
<script>
const app = new Vue({
el:"#app",
data:{
message:"你好啊",
firstName:"skt t1",
lastName:"faker",
count:100
}
})

</script>
</body>
</html>
# 2. v-once ​ v-once表示该dom元素只渲染一次,之后数据改变,不会再次渲染。
1
2
3
4
5
6
<div id="app">
<h2>&#123;&#123;message&#125;&#125;</h2>
<!-- 只会渲染一次,数据改变不会再次渲染 -->
<h2 v-once>&#123;&#123;message&#125;&#125;</h2>

</div>
​ 上述`{{message}}`的message修改后,第一个h2标签数据会自动改变,第二个h2不会。 # 3. v-html ​ 在某些时候我们不希望直接输出`百度一下`这样的字符串,而输出被html自己转化的超链接。此时可以使用v-html。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>v-html指令的使用</title>
</head>
<body>
<div id="app">
<h2>不使用v-html</h2>
<h2>&#123;&#123;url&#125;&#125;</h2>
<h2>使用v-html,直接插入html</h2>
<h2 v-html="url"></h2>

</div>
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/vue.js"></script>
<script>
const app = new Vue({
el:"#app",
data:{
message:"你好啊",
url:"<a href='http://www.baidu.com'>百度一下</a>"
}
})
</script>
</body>
</html>
输出结果如下: ![](https://cdn.jsdelivr.net/gh/krislinzhao/IMGcloud/img/20200508144442.png) # 4. v-text ​ v-text会覆盖dom元素中的数据,相当于js的innerHTML方法。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>v-text指令的使用</title>
</head>
<body>
<div id="app">
<h2>不使用v-text</h2>
<h2>&#123;&#123;message&#125;&#125;,啧啧啧</h2>
<h2>使用v-text,以文本形式显示,会覆盖</h2>
<h2 v-text="message">,啧啧啧</h2>

</div>
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/vue.js"></script>
<script>
const app = new Vue({
el:"#app",
data:{
message:"你好啊"
}
})
</script>
</body>
</html>
​ 如图所示,使用`{{message}}`是拼接变量和字符串,而是用v-text是直接覆盖字符串内容。 ![](https://cdn.jsdelivr.net/gh/krislinzhao/IMGcloud/img/20200508144513.png) # 5. v-pre ​ 有时候我们期望直接输出`{{message}}`这样的字符串,而不是被`{{}}`语法转化的message的变量值,此时我们可以使用`v-pre`标签。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>v-pre指令的使用</title>
</head>
<body>
<div id="app">
<h2>不使用v-pre</h2>
<h2>&#123;&#123;message&#125;&#125;</h2>
<h2>使用v-pre,不会解析</h2>
<h2 v-pre>&#123;&#123;message&#125;&#125;</h2>

</div>
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/vue.js"></script>
<script>
const app = new Vue({
el:"#app",
data:{
message:"你好啊"
}
})
</script>
</body>
</html>
​ 结果如图,使用v-pre修饰的dom会直接输出字符串。 ![](https://cdn.jsdelivr.net/gh/krislinzhao/IMGcloud/img/20200508144536.png) # 6. v-cloak ​ 有时候因为加载延时问题,例如卡掉了,数据没有及时刷新,就造成了页面显示从`{{message}}`到message变量“你好啊”的变化,这样闪动的变化,会造成用户体验不好。此时需要使用到`v-cloak`的这个标签。在vue解析之前,div属性中有`v-cloak`这个标签,在vue解析完成之后,v-cloak标签被移除。简单,类似div开始有一个css属性`display:none;`,加载完成之后,css属性变成`display:block`,元素显示出来。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
<!DOCTYPE html>
<html lang="en">

<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>v-cloak指令的使用</title>
<style>
[v-cloak]{
display: none;
}
</style>
</head>

<body>
<div id="app" v-cloak>
<h2>&#123;&#123;message&#125;&#125;</h2>
</div>
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/vue.js"></script>
<script>
//在vue解析前,div中有一个属性cloak
//在vue解析之后,div中没有一个属性v-cloak
setTimeout(() => {
const app = new Vue({
el: "#app",
data: {
message: "你好啊"
}
})
}, 1000);
</script>
</body>

</html>
​ 这里通过延时1秒模拟加载卡住的状态,结果一开始不显示message的值,div元素中有v-cloak的属性,1秒后显示message变量的值,div中的v-cloak元素被移除。 ![](https://cdn.jsdelivr.net/gh/krislinzhao/IMGcloud/img/20200508144618.gif)