模板语法

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

在底层的实现上,Vue 将模板编译成虚拟 DOM 渲染函数。结合响应系统,Vue 能够智能地计算出最少需要重新渲染多少组件,并把 DOM 操作次数减到最少。

如果你熟悉虚拟 DOM 并且偏爱 JavaScript 的原始力量,你也可以不用模板,直接写渲染 (render) 函数,使用可选的 JSX 语法。

插值

文本

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

<span>Message: {{ msg }}</span>
复制代码

Mustache 标签将会被替代为对应数据对象上 msg 属性的值。无论何时,绑定的数据对象上 msg 属性发生了改变,插值处的内容都会更新。

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

<span v-once>这个将不会改变: {{ msg }}</span>
复制代码

原始 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 指令:

<div v-bind:id="dynamicId"></div>
复制代码

在布尔特性的情况下,它们的存在即暗示为 true,v-bind 工作起来略有不同,在这个例子中:

<button v-bind:disabled="isButtonDisabled">Button</button>
复制代码

如果 isButtonDisabled 的值是 null、undefined 或 false,则 disabled 特性甚至不会被包含在渲染出来的 <button> 元素中。

使用 JavaScript 表达式

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

{{ number + 1 }}{{ ok ? 'YES' : 'NO' }}{{ message.split('').reverse().join('') }}<div v-bind:id="'list-' + id"></div>
复制代码

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

<!-- 这是语句,不是表达式 -->
{{ var a = 1 }}<!-- 流控制也不会生效,请使用三元表达式 -->
{{ if (ok) { return message } }}
复制代码

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

指令

指令 (Directives) 是带有 v- 前缀的特殊属性。指令属性的值预期是单个 JavaScript 表达式 (v-for 是例外情况,稍后我们再讨论)。指令的职责是,当表达式的值改变时,将其产生的连带影响,响应式地作用于 DOM。回顾我们在介绍中看到的例子:

<p v-if="seen">现在你看到我了</p>
复制代码

这里,v-if 指令将根据表达式 seen 的值的真假来插入/移除 <p> 元素。

参数

一些指令能够接收一个“参数”,在指令名称之后以冒号表示。例如,v-bind 指令可以用于响应式地更新 HTML 属性:

<a v-bind:href="url">...</a>
复制代码

在这里 href 是参数,告知 v-bind 指令将该元素的 href 属性与表达式 url 的值绑定。

另一个例子是 v-on 指令,它用于监听 DOM 事件:

<a v-on:click="doSomething">...</a>
复制代码

在这里参数是监听的事件名。我们也会更详细地讨论事件处理。

修饰符

修饰符 (Modifiers) 是以半角句号 . 指明的特殊后缀,用于指出一个指令应该以特殊方式绑定。例如,.prevent 修饰符告诉 v-on 指令对于触发的事件调用 event.preventDefault()

<form v-on:submit.prevent="onSubmit">...</form>
复制代码

在接下来对 v-onv-for 等功能的探索中,你会看到修饰符的其它例子。

缩写

v- 前缀作为一种视觉提示,用来识别模板中 Vue 特定的特性。当你在使用 Vue.js 为现有标签添加动态行为 (dynamic behavior) 时,v- 前缀很有帮助,然而,对于一些频繁用到的指令来说,就会感到使用繁琐。同时,在构建由 Vue.js 管理所有模板的单页面应用程序 (SPA - single page application)时,v- 前缀也变得没那么重要了。因此,Vue.js 为 v-bindv-on 这两个最常用的指令,提供了特定简写:

v-bind 缩写

<!-- 完整语法 -->
<a v-bind:href="url">...</a><!-- 缩写 -->
<a :href="url">...</a>
复制代码

v-on 缩写

<!-- 完整语法 -->
<a v-on:click="doSomething">...</a><!-- 缩写 -->
<a @click="doSomething">...</a>
复制代码

它们看起来可能与普通的 HTML 略有不同,但 : 与@ 对于特性名来说都是合法字符,在所有支持 Vue.js 的浏览器都能被正确地解析。而且,它们不会出现在最终渲染的标记中。缩写语法是完全可选的,但随着你更深入地了解它们的作用,你会庆幸拥有它们。

Vue 第一天:模板语法相关推荐

  1. 【猿说VUE】初试模板语法,开启VUE编码之旅

    模板语法 官网描述: Vue.js 使用了基于 HTML 的模板语法,允许开发者声明式地将 DOM 绑定至底层 Vue 实例的数据.所有 Vue.js 的模板都是合法的 HTML ,所以能被遵循规范的 ...

  2. VUE中的模板语法以及过滤器和双向数据绑定

    目录: 1. 模板语法 1.1 插值 1.1.1 文本 1.1.2 html 1.1.3 属性 1.1.4 表达式 1.2 指令 1.2.1 核心指令 1.2.1.1 v-if |v-else-if| ...

  3. VUE基本使用---安装、开始使用介绍、Vue实例、模板语法、计算属性和侦听器、class与style绑定

    原文在我的博客:https://www.liboer.top/articles/detail/vue-BasedUse/ 文章目录 VUE.js 基础 安装 CDN 下载 安装 命令行工具(CLI脚手 ...

  4. 1.vue简介以及模板语法---vue教程

    1. vue简介 vue的组件化 后缀名为.vue的文件是vue.js特有文件格式,表示一个vue组件 ,即单页式组件,可承载视图模板-,"样式定义"- 2.vue扩展插件 vue ...

  5. vue.js 01 模板语法

    文章目录 vue插值 vue指令 vue插值 代码: <!DOCTYPE html> <html lang="en"> <head><me ...

  6. Vue入门(一)—— 模板语法

    Vue.js 是什么? Vue (读音 /vjuː/,类似于 view) 是一套用于构建用户界面的渐进式框架. Vue 的核心库只关注视图层,不仅易于上手,还便于与第三方库或既有项目整合. 什么是渐进 ...

  7. 灵魂拷问:你是否懂得所有的Vue模板语法呢?

    作者 | Jeskson 掘金 | https://juejin.im/user/5a16e1f3f265da43128096cb Vue.js的创建者为尤雨溪,2014年,Vue.js正式发布,20 ...

  8. Vue2.x 核心基础(Vue概述,Vue基本使用,@vue/cli脚手架,Element-UI 的基本使用,Vue模板语法)

    1. Vue概述 尤雨溪:Vue.js的创建者 2014年2月,Vue.js正式发布 2015年10月27日,正式发布1.0.0 2016年4月27日,发布2.0的预览版本 Vue:渐进式JavaSc ...

  9. 从零学习Vue - 02模板语法、el与data两种写法、mvvm模型、数据代理

    root容器里的代码被称为模板,有了模板会有特殊的模板语法.Vue模板中语法有两大类,一类是插值语法,另一类是指令语法. 插值语法 功能:用于解析标签体内容.写法:{{xxx}},xxx为js表达式, ...

最新文章

  1. 有关于诚信:唐骏学历门
  2. Spring Boot 2.1.0 已发布,7 个重大更新! 1
  3. JAVA多线程学习3--线程一些方法
  4. 如何注册鸿蒙id,鸿蒙系统真机调试证书 和 设备ID获取
  5. l启动进程 linux,《日子》. linux 查看进程启动路径
  6. 如何在TypeScript的`window`上显式设置新属性?
  7. model.train() model.eval()
  8. (2) python 使用pd.read_excel 读取excel时,选取某一列为索引
  9. 魅族 刷机android 6.0,魅族MX6如何刷机升级 魅族MX6升级方法【详解】
  10. 【吐血整理,建议收藏】B站上有哪些值得反复观看的Java视频教程?
  11. 成为一名嵌入式Linux开发工程师需要学习哪些知识?
  12. deepin,真好用-09-deepin真垃圾
  13. UNet 、3D-UNet 、VNet 区别
  14. java string 深拷贝_探讨java深拷贝
  15. Android—传感器-距离传感器(ProximitySensor)
  16. 增加点赞手势图及提交按钮图标
  17. Python简笔画——用Turtle库画一只《穿红靴子的小鸭》
  18. slice扩容机制分析
  19. hiho 挑战赛16 A.王胖浩与三角形
  20. 极大似然估计原理详解

热门文章

  1. 小学计算机课教后小记,小学信息技术课开展生活化教学的方法
  2. excel清空sheet内容 poi_Excel隐藏了一个sheet表,java poi中是可以读出来的,现在我不想读取隐藏的sheet表。...
  3. HTML快速上手教程
  4. Postman中json内字符串转义问题
  5. linux有名管道大小,Linux中的pipe与named pipe(FIFO),即管道和命名管道
  6. 惨遭打脸:字节某部门竟然有这么多测试
  7. php根据类名字符串,PHP 5.5 新特性 ::class 获取类名字符串
  8. python爬取b站评论_用python 抓取B站视频评论,制作词云
  9. 服务器搭建成虚拟空间,服务器搭建虚拟空间
  10. 2ask调制解调信噪比matlab实现,MATLAB模拟2ASK调制误码率与信噪比关系曲线的程序...