Skip to content

Vue 模板语法

Vue 使用一种基于 HTML 的模板语法,允许开发者声明式地将 DOM 绑定到组件实例的底层数据。所有 Vue 模板都是语法层面合法的 HTML,可以被符合规范的浏览器和 HTML 解析器解析。

在底层机制中,Vue 会将模板编译成高度优化的 JavaScript 代码。结合响应式系统,当应用状态变更时,Vue 能够智能地推导出需要重新渲染的组件的最少数量,并应用最少的 DOM 操作。

插值

文本

数据绑定最常见的形式就是使用“Mustache”语法 (双大括号) 的文本插值:

vue
<span>Message: {{ msg }}</span>

双大括号标签会被替换为相应组件实例中 msg property 的值。同时,每当 msg property 变更时,插值处的内容都会自动更新。

原始 HTML

双大括号会将数据解释为普通文本,而非 HTML 代码。若想插入 HTML,你需要使用 v-html 指令:

vue
<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 指令:

vue
<div v-bind:id="dynamicId"></div>

v-bind 指令指示 Vue 将元素的 id attribute 与组件的 dynamicId property 保持一致。如果绑定的值是 null 或者 undefined,那么该 attribute 将会从渲染的元素上移除。

由于 v-bind 非常常用,我们为它提供了一个专用的简写语法:

vue
<div :id="dynamicId"></div>

使用 JavaScript 表达式

Vue 在所有的数据绑定中都支持完整的 JavaScript 表达式:

vue
{{ number + 1 }}

{{ ok ? 'YES' : 'NO' }}

{{ message.split('').reverse().join('') }}

<div :id="'list-' + id"></div>

这些表达式都会在当前组件实例的数据作用域下作为 JavaScript 被解析。唯一的限制是,每个绑定都只能包含单个表达式,所以下面的例子是不会生效的:

vue
<!-- 这是语句,不是表达式 -->
{{ var a = 1 }}

<!-- 流控制也不会生效,请使用三元表达式 -->
{{ if (ok) { return message } }}

本站内容仅供学习和研究使用。