template三种写法
1. 完整版,写在html里
<div id=xxx>{{n}}<button @click="add">+1</button></div>
new Vue({el: '#xxx',data: {n:0}, // data可以改成函数methods:{add(){}}})
2. 完整版写在options里
<div id=app></div>
new Vue({template:`<div>{{n}}<button @click="add">+1</button></div>`,data: {n:0},methods:{add(){this.n += 1}}}).$mount('#app')// 挂载到div#app, div的原内容会被替代
3. 非完整版,配合xxx.vue文件
vue文件
<template><div>{{n}}<button @click="add">+1</button></div></template><script>export default {data(){return {n:0}}, // data必须为函数methods:{add(){this.n += 1}}}</script><style>这里写CSS代码</style>
在另一个地方引入vue文件,并render
import Xxx from './xxx.vue'// Xxx是一个options对象new Vue({render: h => h(Xxx)}).$mount('#app')
注意:是HTML5的元素,不是Vue的
 {{ object.a }} 表达式 更新元素的  不对模板进行编译 绑定事件监听器。事件类型由参数指定。表达式可以是一个方法的名字或一个内联语句,如果没有修饰符也可以省略 另一个用于根据条件展示元素的选项是  这个指令保持在元素上直到关联实例结束编译。和 CSS 规则如  只渲染元素和组件一次。随后的重新渲染,元素/组件及其所有的子节点将被视为静态内容并跳过。这可以用于优化更新性能。 有的时候用一个事件来抛出一个特定的值是非常有用的。例如我们可能想让  然后当在父级组件监听这个事件的时候,我们可以通过 语法
表达式
{{ n + 1 }} 可以写任何运算
{{ fn(n) }} 可以调用函数,methods里的
如果值为 undefined 或 null 就不显示
另一种写法 v-html
innerHTML
假设 data.x 值为 hiv-pre
<span v-pre>{{ this will not be compiled }}</span>
v-bind绑定属性
<!-- 绑定一个 attribute -->
<img v-bind:src="imageSrc">
<!-- 缩写 -->
<img :src="imageSrc">
<!-- style 绑定 -->
<div :style="{ fontSize: size + 'px' }"></div>
<div :style="[styleObjectA, styleObjectB]"></div>
<div :style="{ border: '1px solid red', height:100}"> </div>  
<!-- 100px 写成 100 -->
v-on
<!-- 方法处理器 -->
<button v-on:click="doThis"></button>
<!-- 内联语句 -->
<button v-on:click="doThat('hello', $event)"></button>
<!-- 缩写 -->
<button @click="doThis"></button>
<!-- 停止冒泡 -->
<button @click.stop="doThis"></button>
<!-- 阻止默认行为 -->
<button @click.prevent="doThis"></button>
<!-- 阻止默认行为,没有表达式 -->
<form @submit.prevent></form>
条件判断
v-if 指令用于条件性地渲染一块内容。这块内容只会在指令的表达式返回 truthy 值的时候被渲染<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-for
<ul>
  <li v-for="(u,index) in users" :key="index">
    索引: {{index}} 值: {{u.name}}
  </li>
</ul>
<ul>
  <li v-for="(value,name) in obj" :key="name">
    属性名: {{name}} 属性值: {{value}}
  </li>
</ul>
v-show
v-show 指令。用法大致一样:<h1 v-show="n%2===0">Hello!</h1>
v-show 只是简单地切换元素的 CSS property display。
注意,v-show 不支持 <template> 元素,也不支持 v-else。
v-cloak
[v-cloak] { display: none } 一起用时,这个指令可以隐藏未编译的 Mustache 标签直到实例准备完毕。[v-cloak] {
  display: none;
}
<div v-cloak>
  {{ message }}
</div>
v-once
<!-- 单个元素 -->
<span v-once>This will never change: {{msg}}</span>
<!-- 有子元素 -->
<div v-once>
  <h1>comment</h1>
  <p>{{msg}}</p>
</div>
<!-- 组件 -->
<my-component v-once :comment="msg"></my-component>
<!-- `v-for` 指令-->
<ul>
  <li v-for="i in list" v-once>{{i}}</li>
</ul>
使用事件抛出一个值
<blog-post> 组件决定它的文本要放大多少。这时可以使用 $emit 的第二个参数来提供这个值:<button v-on:click="$emit('enlarge-text', 0.1)">
  Enlarge text
</button>
$event 访问到被抛出的这个值:<blog-post
  ...
  v-on:enlarge-text="postFontSize += $event"
></blog-post>
修饰符
@click.stop="add"表示阻止事件传播/冒泡
@click.prevent="add"表示阻止默认动作
@click.stop.prevent="add"同时表示两种意思
