貌似最近耍react和redux耍得比较多,vue已经有了要淡忘的趋势。所以,赶紧的,vue耍起来…
前言
本文旨在提醒自己在vue中容易混淆和淡忘的点。所以此处略过vue的基础知识。
Vue实例
Vue 实例暴露了一些有用的实例属性与方法。这些属性与方法都有前缀$
,以便与代理的data
属性区分。
插值语法
添加含标签的插值
双大括号会将数据解释为纯文本,而非HTML
。为了输出真正的HTML
,你需要使用v-html
指令。
给标签属性绑定动态值
差值不能在标签里面使用,要在标签里面绑定动态值,需要使用v-bind
指令。1
<div v-bind:id="动态ID"></div>
指令
指令的:
指令通过后面的:
来接收参数(最常用的便是动态绑定标签属性)。
指令的.
指令的.
(修饰符)用于指出一个指令应该以某种特殊的方式绑定。1
<form v-on:submit.prevent="onSubmit"></form>
过滤器(管道)
过滤器允许用在两个地方:mustache
插值和v-bind
表达式。
它只适合处理文本转换,更加复杂的转换需要用到计算属性。
改变样式
通过class
改变样式
使用对象的形式绑定class
1
2
3
4
5
6
7
8
9// 这个对象可以直接写在ng-bind:class中,也可以写在data属性中,但是,放在计算属性中无疑是最强大的
computed: {
classObject: function () {
return {
active: this.isActive && !this.error,
'text-danger': this.error && this.error.type === 'fatal',
}
}
}
使用数组的形式绑定class
1
2
3
4<!-- 数组里面使用三元表达式 -->
<div v-bind:class="[isActive ? activeClass : '', errorClass]">
<!-- 数组里面使用对象方式 -->
<div v-bind:class="[{ active: isActive }, errorClass]">
通过内联样式改变样式
对象语法常常结合返回对象的计算属性使用。v-bind:style
的数组语法可以将多个样式对象应用到一个元素上。
列表渲染
列表渲染中的参数
1 | <!-- 循环数组 --> |
循环渲染大段内容
只需在这段内容的最外层包一层<template> ~ </template>
标签即可。
整数迭代 v-for
1 | <span v-for="n in 10">{{ n }}</span> |
显示过滤/排序结果
1 | <!-- evenNumbers是计算属性,这个属性过滤了某些值 --> |
事件处理
在事件处理函数中访问原生DOM对象
有时也需要在内联语句处理器中访问原生DOM事件。可以用特殊变量$event
把它传入处理事件的回调函数。
事件修饰符
直接上代码:1
2
3
4
5
6
7
8
9
10
11
12
13
14<!-- 阻止单击事件冒泡 -->
<a v-on:click.stop="doThis"></a>
<!-- 提交事件不再重载页面 -->
<form v-on:submit.prevent="onSubmit"></form>
<!-- 修饰符可以串联 -->
<a v-on:click.stop.prevent="doThat"></a>
<!-- 只有修饰符 -->
<form v-on:submit.prevent></form>
<!-- 添加事件侦听器时使用事件捕获模式 -->
<div v-on:click.capture="doThis">...</div>
<!-- 只当事件在该元素本身(而不是子元素)触发时触发回调 -->
<div v-on:click.self="doThat">...</div>
<!-- 点击事件将只会触发一次 -->
<a v-on:click.once="doThis"></a>
按键修饰符
1 | <!-- 根据键值调用 vm.submit() --> |
表单
修饰符
1 | <!-- 在 "change" 而不是 "input" 事件中更新 --> |
组件
全局注册
1 | // 定义组件时推荐使用‘-’命名 |
局部注册
1 | var Child = { |
data
必须是函数
1 | // 每创建一个组件实例就返回新的data,不然会影响其他实例 |
使用Prop
传递数据
1 | Vue.component('child', { |
Prop
验证
1 | Vue.component('example', { |
使用v-on
绑定自定义事件(子向父传参)
- 使用
$on(eventName)
监听事件。 - 使用
$emit(eventName)
触发事件。
单个Slot
在父组件中传入一堆内容,这堆内容将会在子组件中的
具名Slot
1 | <!-- 这个h1标签将会被插入到name属性为header的slot标签上 --> |
keep-alive
如果把切换出去的组件保留在内存中,可以保留它的状态或避免重新渲染。为此可以添加一个 keep-alive 指令参数。
作用域插槽
1 | <!-- 子组件 --> |