Vue.js模版语法
DogJay
2017-07-13
【前端技术】
514人已围观
Vue.js 使用了基于 HTML 的模版语法,允许开发者声明式地将 DOM 绑定至底层 Vue 实例的数据。所有 Vue.js 的模板都是合法的 HTML ,所以能被遵循规范的浏览器和 HTML 解析器解析。
在底层的实现上, Vue 将模板编译成虚拟 DOM 渲染函数。结合响应系统,在应用状态改变时, Vue 能够智能地计算出重新渲染组件的最小代价并应用到 DOM 操作上。
如果你熟悉虚拟 DOM 并且偏爱 JavaScript 的原始力量,你也可以不用模板,直接写渲染(render)函数,使用可选的 JSX 语法。
插值
数据绑定最常见的形式就是使用 “Mustache” 语法(双大括号)的文本插值:
<span>Message: {{ msg }}span> |
通过使用 v-once 指令,你也能执行一次性地插值,当数据改变时,插值处的内容不会更新。但请留心这会影响到该节点上所有的数据绑定:
<spanv-once>This will never change: {{ msg }}span> |
双大括号会将数据解释为纯文本,而非 HTML 。为了输出真正的 HTML ,你需要使用 v-html
指令:
<divv-html=“rawHtml”>div> |
你的站点上动态渲染的任意 HTML 可能会非常危险,因为它很容易导致 XSS 攻击。请只对可信内容使用 HTML 插值,绝不要对用户提供的内容插值。
XSS攻击:跨站脚本攻击(Cross Site Scripting),为不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆,故将跨站脚本攻击缩写为XSS。
XSS是一种经常出现在web应用中的计算机安全漏洞,它允许恶意web用户将代码植入到提供给其它用户使用的页面中。比如这些代码包括HTML代码和客户端脚本。攻击者利用XSS漏洞旁路掉访问控制——例如同源策略(same origin policy)。这种类型的漏洞由于被黑客用来编写危害性更大的网络钓鱼(Phishing)攻击而变得广为人知。对于跨站脚本攻击,黑客界共识是:跨站脚本攻击是新型的“缓冲区溢出攻击“,而JavaScript是新型的“ShellCode”。
XSS攻击的危害包括
Mustache 不能在 HTML 属性中使用,应使用 v-bind 指令:
<divv-bind:id=“dynamicId”>div> |
<buttonv-bind:disabled=“someDynamicCondition”>Buttonbutton> |
迄今为止,在我们的模板中,我们一直都只绑定简单的属性键值。但实际上,对于所有的数据绑定, Vue.js 都提供了完全的 JavaScript 表达式支持。
{{ number + 1 }} {{ ok ? ‘YES’ : ‘NO’ }} {{ message.split(”).reverse().join(”) }} <divv-bind:id=“‘list-‘ + id”>div> |
{{ var a = 1 }} {{ if (ok) { return message } }} |
指令
指令(Directives)是带有 v-
前缀的特殊属性。指令属性的值预期是单一 JavaScript 表达式(除了v-for
,之后再讨论)。指令的职责就是当其表达式的值改变时相应地将某些行为应用到 DOM 上。让我们回顾一下在介绍里的例子:
<pv-if=“seen”>Now you see mep> |
` 元素。
参数
一些指令能接受一个“参数”,在指令后以冒号指明。例如, v-bind
指令被用来响应地更新 HTML 属性:
<av-bind:href=“url”>a> |
另一个例子是 v-on
指令,它用于监听 DOM 事件:
<av-on:click=“doSomething”> |
修饰符
修饰符(Modifiers)是以半角句号 .
指明的特殊后缀,用于指出一个指定应该以特殊方式绑定。例如,.prevent
修饰符告诉 v-on
指令对于触发的事件调用 event.preventDefault()
:
<formv-on:submit.prevent=“onSubmit”>form> |
Filters
Vue.js allows you to define filters that can be used to apply common text formatting. Filters are usable in two places: mustache interpolations and v-bind
expressions. Filters should be appended to the end of the JavaScript expression, denoted by the “pipe” symbol:
过滤器
Vue.js 允许你自定义过滤器,被用作一些常见的文本格式化。过滤器应该被添加在 mustache 插值的尾部,由“管道符”指示:
{{ message | capitalize }} |
{{ message | capitalize }} <divv-bind:id=“rawId | formatId”>div> |
过滤器函数总接受表达式的值作为第一个参数。
new Vue({ // … filters: { capitalize: function (value) { if (!value) return” value = value.toString() return value.charAt(0).toUpperCase() + value.slice(1) } } }) |
{{ message | filterA | filterB }} |
{{ message | filterA(‘arg1’, arg2) }} |
缩写
v-
前缀在模板中是作为一个标示 Vue 特殊属性的明显标识。当你使用 Vue.js 为现有的标记添加动态行为时,它会很有用,但对于一些经常使用的指令来说有点繁琐。同时,当搭建 Vue.js 管理所有模板的 SPA 时,v-
前缀也变得没那么重要了。因此,Vue.js 为两个最为常用的指令提供了特别的缩写:
v-bind
缩写
<av-bind:href=“url”>a> <a:href=“url”>a> |
<av-on:click=“doSomething”>a> <a @click=“doSomething”>a> |
吐槽(0)
下一篇:Vue学习之路-day01