vue 模板语法

模板语法

Vue.js使用了基于HTML的模板语法,允许开发者声明式将DOM绑定至底层Vue实例的数据。所有Vue.js的模板都是合法的HTML,所以可以被遵循规范的浏览器和HTML解析器解析。

在底层的实现上,Vue将模板编译成虚拟DOM渲染函数。结合响应系统,在应用系统改变时,Vue能够智能计算出重新渲染组件的最小代价并应用到DOM操作上。

插值

#文本

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

{{msg}}

通过使用v-once指令,你也能执行一次性的插值,当数据变化时,插值处的内容不会更新。但请留心这会影响到该节点上所有的数据绑定:

<span v-once>{{msg}}</span>

#纯HTML

双大括号会将数据解释为纯文本,而非 HTML 。为了输出真正的 HTML ,你需要使用 v-html 指令:

<div v-html="rawHtml"></div>

被插入的内容都会被当做 HTML —— 数据绑定会被忽略。

注意,你不能使用 v-html 来复合局部模板,因为 Vue 不是基于字符串的模板引擎。组件更适合担任 UI 重用与复合的基本单元。

你的站点上动态渲染的任意 HTML 可能会非常危险,因为它很容易导致 XSS 攻击。请只对可信内容使用 HTML 插值,绝不要对用户提供的内容插值。

属性

Mustache 不能在 HTML 属性中使用,应使用 v-bind 指令:

<div v-bind:id="dynamicId"></div>
<button v-bind:disabled="someDynamicCondition">Button</button>

这对布尔值的属性也有效 —— 如果条件被求值为 false 的话该属性会被移除:

#使用javascript表达式

迄今为止,在我们的模板中,我们一直都只绑定简单的属性键值。但实际上,对于所有的数据绑定,Vue.js都提供了完全的javascript表达式支持。

{{number+1}}

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

{{msg.split("").reverse().join(" ")}}

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

这些表达式会在所属Vue实例的数据作用域下作为javascript被解析。有个限制就是。每个绑定都只能包含单个表达式,所以下面的例子都不会生效。

<!--这是语句,不是表达式-->

{{var a=1}}



<!--流控制也不会生效,请使用三元表达式-->

{{

  if(ok){

    return messgae

  }

}}

模板表达式都被放在沙盒中,只能访问全局变量的一个白名单,如 Math 和 Date 。你不应该在模板表达式中试图访问用户定义的全局变量。

原文地址:https://www.cnblogs.com/xiaofenguo/p/6544274.html