- 写在 
<template>里的语法 - Vue.js 模板语法是 XML:标签必须闭合,空 div 可写成 
<div /> - 在底层实现上,vue 将模板编译成虚拟 DOM 渲染函数,结合响应系统,Vue 能够智能地计算出最少需要重新渲染多少组件,并把 DOM 操作次数减到最少。
 - 可以不用模板,自己写渲染(render)函数
 
插入表达式 {{}}
声明式渲染: 声明式地将数据渲染进 DOM 的系统
所有数据都是响应式的,当 app.message 更新时, 页面也会跟着变化
不再与 HTML 直接交互。一个 Vue 应用会将其挂载到一个 DOM 元素上 (这里是 #app) 然后对其进行完全控制。那个 HTML 是我们的入口,但其余都会发生在新创建的 Vue 实例内部
文本插值
<div id="app"><!-- "Mustache" 语法:响应式 --><div> {{ message }} </div><!-- v-once 指令:一次性插值,非响应式 --><div v-once>{{ message }}</div></div>
new Vue({el: '#app',data: {message: 'Hi'}})
原始 HTML
- 双大括号会将数据解释为普通文本,若要输出真正的 HTML ,要使用  
v-html指令 
<p>Using mustaches: {{ rawHtml }}</p><p>Using v-html directive: <span v-html='rawHtml'></span></p>

span 的内容将会被替换成为 property 值 rawHtml,直接作为 HTML——会忽略解析 property 值中的数据绑定
可使用 JS 表达式绑定数据,每个绑定只能包含单个表达式,不能包含语句
{{ number + 1 }}{{ ok ? 'yes' : 'no' }}{{ message.split('').reverse().join('')}}<div v-bind:id="'list-' + id"></div><!-- 语句无效,必须为单个表达式 -->{{ var a = 1 }}
指令 Directives
- 指令是带有 
v-前缀的特殊 attribute - 指令是为了减少重复的 DOM 操作
 
绑定属性 v-bind
- 从 2.6.0  开始,可以用 
[]括起来的 JavaScript 表达式作为一个指令的参数 []中不能有空格和引号[]中变量名不使用大写,因为浏览器会全部转换为小写- 动态参数可接受唯一的非字符串类型的值为 
null, 该值可用于移除绑定 
<!-- 绑定元素 --><a v-bind:href="url"> ... </a><!-- 若 key = "href", 则等价于 v-bind:href --><a v-bind:[key]="url"> ... </a><!-- v-bind缩写 --><a :href="url"> ... </a><a :[key]="url"> ... </a><div :style={width: 10%}></div>
绑定事件 v-on
使用 v-on`指令进行事件绑定
<!-- 绑定事件 --><a v-on:click="playTwoDays"> ... </a><a v-on:[event]="playTwoDays"> ... </a><!-- v-on缩写 --><a @click="playTwoDays"> ... </a><a @[event]="playTwoDays"> ... </a>
- 直接写 JS 代码
 
<div id="app"><span>{{ number }}</span><button @click="number += 1">+1</button></div>
new Vue({el: '#app',data: {number: 0}})
- 接收可调用的方法名 or 在内联 JS 语句中调用方法
 
<div id="app"><span>{{ number }}</span><!-- 接收可调用的方法名 --><button @click="add1"> <!-- 在内联 JS 语句中调用方法: <button @click="add1()"> -->+1</button></div>
new Vue({el: '#app',data: {number: 0},methods: {add1() {this.number += 1}}})
条件渲染 v-if
v-if指令:条件性地渲染一块内容,只有在指令地表达式返回 true 时才会被渲染
控制切换一个元素是否显示:
<div id="app-3"><p v-if="seen">出现!</p></div>
new Vue({el: '#app-3',data: {seen: true // 在控制台输入 app3.seen = false 则信息消失}})
v-else-if
<div v-if="type === 'A'">A</div><div v-else-if="type === 'B'">B</div><div v-else-if="type === 'C'">C</div><div v-else>Not A/B/C</div>
v-show:只是简单地切换元素的 CSS propertydisplay
一般来说,v-if 有更高的切换开销,而 v-show 有更高的初始渲染开销。因此,如果需要非常频繁地切换,则使用 v-show 较好;如果在运行时条件很少改变,则使用 v-if 较好。
<h1 v-show="ok">Hello!</h1>
循环渲染 v-for
v-for用于遍历数组来渲染一个列表- 遍历值 
item in items - 遍历值与索引 
(item, index) in items - 可用 
of代替in,即item of items 
- 遍历值 
 
<!-- 遍历打印数组 --><div id="app-4"><ol><li v-for="(item, index) in items" :key="item.message">{{ item.message }} - {{ index }}</li></ol></div>
new Vue({el: '#app-4',data: {items: [{message: '吃饭'},{message: '睡觉'},{message: '打豆豆'}]}})// out:// 1. 吃饭 - 0// 2. 睡觉 - 1// 3. 打豆豆 - 2
在控制台输入 `app4.items.push({message: ‘继续打豆豆’}),列表最后会添加一条信息
v-for遍历对象:- 遍历值 
value in obj - 遍历键值对 
(value, key) in obj - 遍历键值对与索引 
(value, key, index) in obj 
- 遍历值 
 
<div id="app" v-for="(value key) in obj">{{key}}: {{value}}</div>
new Vue({el: '#app',obj: {title: 'How to do lists in Vue',author: 'Jane Doe',publishedAt: '2016-04-10'}})// out:// title: How to do lists in Vue// author: Jane Doe// publishedAt: 2016-04-10
- 当 
v-if与v-for一起使用时,v-if具有比v-for更高的优先级,一般不推荐一同使用,除了有些情况:- 只为部分项渲染节点 ```html
 - {{ todo.name }}
 
 
  
- 跳过某些循环渲染```html<ul v-if="todo.length"><li v-for="todo in todos">{{ todo }}</li></ul>
- Vue 使用 
v-for渲染元素列表时,默认使用“就地更新”策略,如果列表项顺序改变,Vue 不会移动 DOM 元素,而是就地更新每个元素,若需要Vue跟踪每个节点的身份,从而重用和重新排序现有元素,则需要给每项提供一个唯一的key 
<div v-for="item in items" :key="item.id"><!-- 内容 --></div>
- 数组更新:Vue 对数组的操作进行了封装,包括
 
自定义指令
修饰符
v-on
事件修饰符
event.preventDefault阻止默认事件event.stopPropagation阻止冒泡event.once事件只促发一次<a @clicl.once = "doSomeThing"></a>
按键修饰符
监听键盘事件时得到按键的信息
<!-- 只有在 `key` 是 `Enter` 时调用 `vm.submit()` --><input @keyup.enter="submit"><input @keyup.13="submit">
Vue 提供了常用按键码的别名:.enter, .tab, .esc, .space, up, .down, .left, .right
- 鼠标按钮修饰符
 
v-bind
.prop .camel .sync
v-model
- .lazy
 - .number
 - .trim
 
