Vue 模板语法
Vue 使用一种基于 HTML 的模板语法,允许开发者声明式地将 DOM 绑定到组件实例的底层数据。所有 Vue 模板都是语法层面合法的 HTML,可以被符合规范的浏览器和 HTML 解析器解析。
在底层机制中,Vue 会将模板编译成高度优化的 JavaScript 代码。结合响应式系统,当应用状态变更时,Vue 能够智能地推导出需要重新渲染的组件的最少数量,并应用最少的 DOM 操作。
插值
文本
数据绑定最常见的形式就是使用“Mustache”语法 (双大括号) 的文本插值:
<span>Message: {{ msg }}</span>双大括号标签会被替换为相应组件实例中 msg property 的值。同时,每当 msg property 变更时,插值处的内容都会自动更新。
原始 HTML
双大括号会将数据解释为普通文本,而非 HTML 代码。若想插入 HTML,你需要使用 v-html 指令:
<p>Using text interpolation: {{ rawHtml }}</p>
<p>Using v-html directive: <span v-html="rawHtml"></span></p><span v-html="rawHtml"></span> 的内容将会被 rawHtml property 的值替换,并被当做 HTML 解析。请注意,你不能使用 v-html 来复合局部模板,因为 Vue 不是一个基于字符串的模板引擎。
安全警告:在网站上动态渲染任意 HTML 是非常危险的,因为这非常容易导致 XSS 攻击。请只对可信内容使用 HTML 插值,永远不要将用户提交的内容作为插值。
Attribute 绑定
Mustache 语法不能在 HTML attribute 中使用。想要响应式地绑定一个 attribute,应该使用 v-bind 指令:
<div v-bind:id="dynamicId"></div>v-bind 指令指示 Vue 将元素的 id attribute 与组件的 dynamicId property 保持一致。如果绑定的值是 null 或者 undefined,那么该 attribute 将会从渲染的元素上移除。
由于 v-bind 非常常用,我们为它提供了一个专用的简写语法:
<div :id="dynamicId"></div>使用 JavaScript 表达式
Vue 在所有的数据绑定中都支持完整的 JavaScript 表达式:
{{ number + 1 }}
{{ ok ? 'YES' : 'NO' }}
{{ message.split('').reverse().join('') }}
<div :id="'list-' + id"></div>这些表达式都会在当前组件实例的数据作用域下作为 JavaScript 被解析。唯一的限制是,每个绑定都只能包含单个表达式,所以下面的例子是不会生效的:
<!-- 这是语句,不是表达式 -->
{{ var a = 1 }}
<!-- 流控制也不会生效,请使用三元表达式 -->
{{ if (ok) { return message } }}