底层实现上, Vue将模板编译成虚拟DOM渲染函数。结合响应系统,Vue能智能计算出最少需要重新渲染多少组件,并把DOM操作次数减到最少。
### 插值
#### 文本
Mustache是一个JavaScript的模板引擎。
[http://mustache.github.io/mustache.5.html](http://mustache.github.io/mustache.5.html)
{{}}, 双大括号的文本插值就是Mustache语法。
```
<span>Message: {{ msg }}</span>
```
v-once 指令用来设定一次性插值,当数据改变时,插值处的内容不会更新。
```
<span v-once>这个将不会改变: {{ msg }}</span>
```
#### 原始HTML v-html 指令
双大括号将数据解释为普通文本,而不是HTML代码。如果要输出真正的HTML,使用v-html 指令
```
<p>Using mustaches: {{ rawHtml }}</p>
<p>Using v-html directive: <span v-html="rawHtml"></span></p>
```
动态渲染任意的HTML会容易导致XSS攻击。
#### HTML属性绑定,使用v-bind
大括号的Mustache不能作用在HTML元素的属性上, 所以要使用v-bind指令。
```
<div v-bind:id="dynamicId"></div>
```
布尔类型的属性:
```
<button v-bind:disabled="isButtonDisabled">Button</button>
```
如果 isButtonDisabled 的值是 null、undefined 或 false,则 disabled attribute 甚至不会被包含在渲染出来的 <button> 元素中。
#### JavaScript表达式
Vue支持绑定种使用JS的表达式,比如加、条件运算符等:
```
{{ number + 1 }}
{{ ok ? 'YES' : 'NO' }}
{{ message.split('').reverse().join('') }}
<div v-bind:id="'list-' + id"></div>
```
限制: 只能绑定单个表达式,下面的无效:
```
<!-- 这是语句,不是表达式 -->
{{ var a = 1 }}
<!-- 流控制也不会生效,请使用三元表达式 -->
{{ if (ok) { return message } }}
```
注意: 不应该在模板表达式中试图访问用户定义的全局变量。
### 指令(Directives)
指令式带有v-前缀的特殊属性,预期值式单个JS表达式(v-for例外)。
#### 参数
一些指令能够接收一个参数, 在指令之后以冒号表示, 比如: v-bind指令用于响应式更新HTML的属性。
```
<a v-bind:href="url">...</a>
```
这里的href是参数,v-bind指令将元素的href属性与表达式url的值绑定。
v-on指令用于监听DOM事件, 参数既是监听的事件名。
#### 动态参数
从2.6.0 开始,可以用方括号括起来的JavaScript表达式作为一个指令的参数。
```
<a v-bind:[attributeName]="url"> ... </a>
```
这里的attributeName会被作为一个JavaScript表达式进行动态求值,求得的值作为最终参数使用。比如attributeName的值为href, 则等价于v-bind:href。
异常状况下,动态参数的值为null。
因为某些字符,比如空格和引号,在HTML属性名中式无效的,所以动态参数表达式有一些语法约束。
```
<!-- 这会触发一个编译警告 -->
<a v-bind:['foo' + bar]="value"> ... </a>
```
在 DOM 中使用模板时 (直接在一个 HTML 文件里撰写模板),还需要避免使用大写字符来命名键名,因为浏览器会把 attribute 名全部强制转为小写:
```
<!--
在 DOM 中使用模板时这段代码会被转换为 `v-bind:[someattr]`。
除非在实例中有一个名为“someattr”的 property,否则代码不会工作。
-->
<a v-bind:[someAttr]="value"> ... </a>
```
#### 修饰符(modifier)
修饰符是以半角句号 . 指明的特殊后缀,用于指出一个指令应该以特殊方式绑定。例如:`.prevent`修饰符告诉`v-on`指令对于触发的事件调用`event.preventDefault()`:
```
<form v-on:submit.prevent="onSubmit">...</form>
```
### 缩写
v- 是用来识别Vue特定的前缀,如果高频使用,稍显繁琐。如果在SPA应用中,只有使用Vue框架时,v-前缀就更显得累赘。因此Vue为v-bind和v-on提供了特定的简写。
#### v-bind简写
```
<!-- 完整语法 -->
<a v-bind:href="url">...</a>
<!-- 缩写 -->
<a :href="url">...</a>
<!-- 动态参数的缩写 (2.6.0+) -->
<a :[key]="url"> ... </a>
```
#### v-on 缩写
```
<!-- 完整语法 -->
<a v-on:click="doSomething">...</a>
<!-- 缩写 -->
<a @click="doSomething">...</a>
<!-- 动态参数的缩写 (2.6.0+) -->
<a @[event]="doSomething"> ... </a>
```
- 引入篇
- 基础篇
- 快速入手
- 名词解释
- Vue语法
- Vue安装
- Vue实例
- 模板语法
- 计算属性和侦听器
- Class与Style绑定
- 条件渲染
- 列表渲染
- 事件处理
- 表单输入绑定
- 组件基础
- 进阶篇
- 常用模块
- 单文件组件
- 快速学会Vue Router路由
- Vue Route 进阶使用
- Vuex 与状态管理
- Axios
- Mock.js
- data数据显示在页面
- Vue生命周期
- Vue按需加载组件
- 国际化
- 页面加载进度条 -NProgress
- 自定义主题颜色
- 开发篇
- Vue入门——创建并运行一个Vue项目
- Vue + Element UI 项目创建
- 使用Vue ui项目创建工具在网页中创建Vue项目
- Vue项目创建入门实例
- Vue CLI
- 创建项目
- 使用Visual Studio Code 开发Vue项目
- 高级篇
- 组件深入
- Vue+Element
- Vue + ElementUI 主题颜色切换
- 工具篇
- 在线代码编辑器
- 开发工具(IDE,集成开发环境)
- npm(JavaScript包管理工具)介绍
- Node.js(npm)在Windows下安装
- webpack介绍
- webpack快速实例
- webpack
- 快速入门实例
- 安装
- 概念
- Nodejs
- 基础
- npm
- 命令参考
- 命令
- 模块安装
- Babel
- 问题解决篇
- ERROR Failed to get response from https://registry.yarnpkg.com/vue-cli-version -marker
- Vue常见问题
- You are using the runtime-only build of Vue where the template compiler is not
- yarn 报unable to get local issuer certificate
- yarn There appears to be trouble with your network connection. Retrying
- Expected Boolean, got String with value "true".
- 项目篇
- 项目创建
- 项目设计
- 页面
- 开发问题
- 后端
- Spring Boot + Activiti 工作流框架搭建之一
- Spring Boot + Activiti 工作流框架搭建之二
- 工作流
- Java流程框架
- Activiti
- 页面风格
- green
- blue
- orange
- 参考篇
- 好的Git项目
- Vue的在线js
- 指令
- 开发说明
- JavaScript 高级
- export和import
- JS模块化规范对比以及在Node.js的实现
- Storage
- ES2015
- scss
- CSS、Sass、SCSS