Skip to content

1. 模板语法

Vue 使用一种基于 HTML 的模板语法,使我们能够声明式地将其组件实例的数据绑定到呈现的 DOM 上。所有的 Vue 模板都是语法层面合法的 HTML,可以被符合规范的浏览器和 HTML 解析器解析。

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

如果你对虚拟 DOM 的概念比较熟悉,并且偏好直接使用 JavaScript,你也可以结合可选的 JSX 支持直接手写渲染函数而不采用模板。但请注意,这将不会享受到和模板同等级别的编译时优化。

1.1 文本插值(mustache语法)

react 中使用 jsx(类似于 js 的一种语法),vue 中使用基于 HTML 的模板语法;

  • { { message } } 双大括号语法;
  • { { 表达式 } };
  • { { 三元运算符 } } : { { age>18?"成年人":"未成年人" } };
  • { { 调用函数 } };

1.2 原始HTML

在当前组件实例上使用v-html,将此元素的innerHTML与rawHtml属性保持同步,也就是说使用了v-html的标签内部的内容会被替换为原生HTML属性的值。

html
<p>Using text interpolation: {{ rawHtml }}</p>
<p>Using v-html directive: <span v-html="rawHtml"></span></p>

WARNING

  1. 不能使用v-html来拼接组合模板,因为Vue不是一个基于字符串的模板引擎。在使用Vue时,应当使用组件作为UI重用和组合的基本单元。

  2. 在网站上动态渲染任意HTML是非常危险的,容易造成XSS漏洞请仅在内容安全可信时再使用v-html,并且永远不要使用用户提供的HTML内容

1.3 属性绑定

html
<!-- v-bind指令 -->
<div v-bind:id="dynamicId"></div>

<!-- 简写 -->
<div :id="dynamicId"></div>

<!-- 同名简写 在Vue 3.4及以上版本中可用-->
<div :id></div>

<!-- 绑定布尔值 -->
<button :disabled="isButtonDisabled">Button</button>

<!-- 其他绑定方法将在指令和事件一节介绍 -->