Vue模板
模板写法
一、完整版,写在HTML里
1  | <div id='xxx'>  | 
二、完整版,写在选项里
1  | <div id='app'></div>  | 
三、非完整版,配合 xxx.vue 单文件组件
1  | // xxx.vue  | 
1  | import Xxx from './xxx.vue'  | 
展示内容
表达式
1
2
3
4
5
6
7{{ object.a }} // 表达式
{{ n + 1 }} // 可以写任何运算
{{ fn(n) }} // 可以调用函数
/*
如果值 为 undefined 或 null 就不显示
另一种写法为 <div v-text="表达式"></div>
*/HTML 内容
假设
data.x值为<strong>hi</strong><div v-html='x'></div>即可显示粗体的 hi展示
<div v-pre>{{ n }}</div>v-pre不会对模板进行编译
绑定属性 v-bind
绑定 src
<img v-bind:src="x" />v-bind: 简写为:
<img :src="x" />绑定对象
<div :style="{border: '1px solid red, height: 100'}"></div>
绑定事件 v-on
v-on : 事件名
1
2
3
4
5
6
7
8
9
10<button v-on:click="add">+1</button>
点击之后,Vue 会运行 add()
<button v-on:click="xxx(1)">xxx</button>
点击之后,Vue 会运行 xxx(1)
<button v-on:click="n+=1">xxx</button>
点击之后,Vue 会运行 n += 1
即发现 函数就加括号调用之,否咋就直接运行代码缩写
<button @click"add">+ 1</button>, 正常人都用缩写🤗
条件判断 v-if v-else-if v-else
if ... else
1  | // 不处于 DOM 树中  | 
循环 v-for
for(value, key) in 对象 或 数组
1  | <ul>  | 
显示/隐藏 v-show
v-show
1  | <div v-show="n % 2 === 0">  | 
v-clock
HTML 绑定 Vue实例,在页面加载时会闪烁,在 css 中添加 [v-clock]{ display: none; }
v-once
v-once 这个指令不需要任何表达式,它的作用就是定义它的元素或组件只会渲染一次,包括元素或者组件的所有字节点。首次渲染后,不再随着数据的改变而重新渲染。也就是说使用 v-once,那么该块都将被视为静态内容。
如果显示的信息后续不需要再修改,使用 v-once,这样可以提高性能。
指令 directive
什么是指令?
<div v-text="x"></div>
<div v-html="x"></div>
以 v- 开头的就是指令。
语法
v -指令名:参数 = 值,例:v-on:click = add
如果值里没有特殊字符,则可以不加引号
有些指令没有参数和值,例:v-pre
有些指令没有值,例:v-on:click.prevent阻止默认事件,@click.prevent='x'阻止默认事件并执行 x 函数
修饰符
有些指令支持修饰符
1  | @click.stop = "add" 表示阻止事件传播/冒泡  | 
一共多少修饰符?
v-on 支持的有
1  | .{keycode | keyAlias}  | 
v-bind 支持的有
1  | .prop .camel .sync  | 
v-model
1  | .lazy .number .trim  | 
重点记忆:
.stop .prevent .sync
.sync (重点)
场景描述:爸爸给儿子钱,儿子要 花钱怎么办,示例
答:儿子打电话(触发事件)向爸爸要钱。
vue规则:
- 组件不能修改 props 外部数据
 this.$emit可以触发事件,并传参$event可以获取$emit的参数
1  | :money.sync="tota"  | 
这样实现了父子组件的双向绑定
子组件使用 $emit 向父组件发送事件
1  | this.$emit('update:title', newTitle)  | 
父组件监听这个事件并更新数据
1  | <text-document  | 
为了方便这种写法,vue 提供了 .sync 修饰符,也就是一种简写方式语法糖:
1  | <text-document v-bind.sync="doc"></text-document>  |