# 模板、数据和指令
Vue 的核心是将『数据 / Data』显示在页面上,这一功能通过『模板 / Template』实现。
为正常的 HTML 添加特殊的属性(也被称作『指令 / Directive』),借助它来告诉 Vue 我们想要实现的效果以及如何处理提供给它的数据。
html 部分
<div id="app"> <p v-if="isMorning">早上好!</p> <p v-if="isAfternoon">中午好!</p> <p v-if="isEvening">晚上好!</p> </div>
js
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/vue.js"></script> <script> var hours = new Date().getHours(); new Vue({ el: '#app', data: { // 后续会改进这个写法 isMorning : hours < 12, isAfternoon : hours >= 12 && hours < 18, isEvening : hours >= 18 } }); </script>
我们通过 data 属性告诉 Vue 在 template 上显示哪些内容。它就是上面所说的『数据 / Data』。
在页面加载时有一个瞬间的闪烁的现象,在《专项问题》笔记中所提供解决方案:v-cloak。
Vue 支持在 v-if 中进行简单的布尔表达式运算。因此,上述示例可以进一步简化:
<div id="app">
<p v-if="hours < 12">早上好!</p>
<p v-if="hours >= 12 && hours < 18">中午好!</p>
<p v-if="hours >= 18">晚上好!</p>
</div>
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/vue.js"></script>
<script>
new Vue({
el: '#app',
data: {
hours: new Date().getHours()
}
});
</script>
v-if="..." 的右值部分本质上要求是一个『表达式』。无论是简单的变量表达式,还是更复杂的其它形式,只要是表达式就行。另外,变量是最简单、最基础的表达式。
除了使用指令,也可以通过插值的方式将数据传递给模板。例如:
<p>Hello, {{ msg }}</p>
data: { // 后续会改进这个写法
msg : 'World'
}
Vue 的『插值表达式』能全面替代 jQuery 中的 $().text() 方法。
除了可以传递字符串和数字这样的简单类型,还可以传递复杂类型的数据到模板中。例如:
<p>第二条狗的名字是 {{ dogs[1] }}</p>
<p>所有狗的名字是 {{ dogs }}</p>
data: { // 后续会改进这种写法
dogs: ['tommy', 'jerry', 'ben']
}