Vue.js 使用了基于 HTML 的模板语法,允许开发者声明式地将 DOM 绑定至底层 Vue 实例的数据。所有 Vue.js 的模板都是合法的 HTML ,所以能被遵循规范的浏览器和 HTML 解析器解析。
在底层的实现上,Vue 将模板编译成虚拟 DOM 渲染函数。结合响应系统,Vue 能够智能地计算出最少需要重新渲染多少组件,并把 DOM 操作次数减到最少。
插值
- 文本 {{msg}}
<!--插值:
文本
数据绑定最常见的形式就是使用“Mustache”语法 (双大括号) 的文本插值:
Mustache 标签将会被替代为对应数据对象上 msg 属性的值。
无论何时,绑定的数据对象上 msg 属性发生了改变,插值处的内容都会更新。-->
<span>Message:{{msg}}</span>
<!--通过使用 v-once 指令,你也能执行一次性地插值,当数据改变时,
插值处的内容不会更新。但请留心这会影响到该节点上的其它数据绑定:-->
<br />
<span v-once>这个将不会改变: {{ msg }}</span>
- 原始html v-html
<!--原始 HTML双大括号会将数据解释为普通文本,
而非 HTML 代码。为了输出真正的 HTML,你需要使用 v-html 指令:-->
<p>Using mustaches: {{ rawHtml }}</p>
<p>Using v-html directive: <span v-html="rawHtml"></span></p>
<!--这个 span 的内容将会被替换成为属性值 rawHtml,直接作为
HTML——会忽略解析属性值中的数据绑定。注意,你不能使用
v-html 来复合局部模板,因为 Vue 不是基于字符串的模板引擎。
反之,对于用户界面 (UI),组件更适合作为可重用和可组合的基本单位。-->
注意:
你的站点上动态渲染的任意 HTML 可能会非常危险,因为它很容易导致 XSS 攻击。请只对可信内容使用 HTML 插值,绝不要对用户提供的内容使用插值
- 特性
<!--Mustache 语法不能作用在 HTML 特性上,
遇到这种情况应该使用 v-bind 指令:
下面的代码,是绑定了了id值,然后通过id对标签设置innerText
-->
<div v-bind:id="dynamicId"></div>
<!--在布尔特性的情况下,它们的存在即暗示为 true,
v-bind 工作起来略有不同,在这个例子中:
如果 isButtonDisabled 的值是 null、undefined 或 false,
则 disabled 特性甚至不会被包含在渲染出来的 <button> 元素中。-->
<button v-bind:disabled="isButtonDisabled">Button</button>
- 使用JavaScript 表达式
<!--使用 JavaScript 表达式在我们的模板中,
我们一直都只绑定简单的属性键值。但实际上,
对于所有的数据绑定,Vue.js 都提供了完全的
JavaScript 表达式支持。
这些表达式会在所属 Vue 实例的数据作用域下作为
JavaScript 被解析。有个限制就是,每个绑定都只能包含单个表达式-->
<div>
first line:{{ number + 1 }}
<br /> second line:{{ ok ? 'YES' : 'NO' }}
<br /> third line: {{ message.split('').reverse().join('') }}
<br />
<div v-bind:id="'list-' + id"></div>
</div>
<!--模板表达式都被放在沙盒中,只能访问全局变量的一个白名单,
如 Math 和 Date 。你不应该在模板表达式中试图访
问用户定义的全局变量。-->
<div>
时间:{{Date().toLocaleString()}}
最大值函数:{{Math.max(10,20)}}
</div>
指令
- 参数
<!--指令
指令 (Directives) 是带有 v- 前缀的特殊特性。
指令特性的值预期是单个 JavaScript 表达式 (v-for
是例外情况,稍后我们再讨论)。指令的职责是,当表达式的值改变时
,将其产生的连带影响,响应式地作用于 DOM。
回顾我们在介绍中看到的例子:-->
<p v-if="seen">现在你看到我了</p>
<!--参数
一些指令能够接收一个“参数”,在指令名称之后以冒号表示。
例如,v-bind 指令可以用于响应式地更新 HTML 特性:
另一个例子是 v-on 指令,它用于监听 DOM 事件:
-->
<a v-bind:href="url">你可以去百度</a>
<br />
<a :href="url">你可以去百度</a><!--这个v-bind是简写-->
<br />
<a v-on:click="doSomething" style="color:red">点击可以调用doSomething函数</a>
<br />
<a @click="doSomething" style="color:red">点击可以调用doSomething函数</a><!--这个v-on是简写-->
参考:
vue.js模板语法