VUE是什么
vue是一套用来构建用户界面的JavaScript框架
在学习vue之前,必须要有HTML、CSS、JavaScript的扎实基础
当前vue的最新版本是2.x
VUE的使用
- 使用script标签引入
- 使用vue-cli来快速搭建脚手架
VUE实例
每一个vue应用都是通过用vue函数来创建一个vue实例开始的:
var vm = new Vue({
//选项
})
每一个vue应用,都是由一个通过new Vue创建的根Vue实例和可选的、可嵌套的、可复用的组件树组成。
data对象
vue中的data对象里,在vue实例创建的时候,在其响应式系统中加入了所有能在data中找到的属性,当这些属性的值发生改变的时候,视图也会响应,一起改变。
var vm = new Vue({
data: data
})
除了数据属性,vue实例中还暴露了一些有用的实例属性和方法。它们都有前缀$,可以和用户定义的属性区分开来
模板语法
文本
数据绑定最常见的是“mustache”语法,也就是双大括号:
Message: {{ msg }}
双大括号里的内容将会被替代为数据对象上面的msg属性的值,如果绑定的这个属性的值发生改变,那么大括号内的内容会跟着更新。
在数据绑定里,还可以支持JavaScript表达式(非语句)。
内部指令
vue内部可以使用在HTML上,HTML会根据这些指令来执行对应的任务,响应式地作用于dom。
v-html
双大括号里会把数据解释为普通文本,而不是HTML,所以如果想输出真正的HTML,那就要使用v-html命令:
Using v-html directive:
v-bind
假如你想像双大括号语法一样修改HTML的属性,那么这时候用双大括号就不行了,需要使用v-bind语法:
这个指令还有一个常用的缩写形式:
v-on
这个指令可以用来监听DOM事件,并在触发时运行一些JavaScript代码
v-on里还可以接受一个需要调用方法的名称。
如果需要在内联语句处理器中访问原始的DOM时间,可以使用特殊变量$event把它传入方法。
vue还为v-on提供了事件修饰符:
- .stop 阻止事件继续传播
- .prevent 提交的事件不再阻止页面
- .capture 添加事件监听器时使用事件捕获模式
- .self 只当在event.target是当前元素自身时触发处理函数
- .once 点击事件将只触发一次
- .passive 滚动事件的默认行为将会立即触发
按键修饰符
除了根据keycode来调用键值,还可以使用vue提供的别名,比如enter等。
条件渲染 v-if
条件渲染可以根据条件来决定是否渲染dom:
也可以使用v-else来添加一个else块,v-else元素必须跟在v-if 的后面。还有v-else-if。
当想切换多个元素的时候,可以在template元素上使用v-if,template就可以当做不可见的元素。
假如两个模板使用了相同的HTML元素,在进行切换的时候,这个元素是不会更新的,这时候就可以使用key值来给这个元素做一个绑定,这个key值是唯一的,因此同一个元素上绑定的两个key值可以让这两个元素都是独立的。
v-show
这个命令可以根据条件选择是否展示元素。
Hello!
v-if 和v-show的区别
v-if是真正的条件渲染,在切换的时候会有适当的销毁和重建,如果是假,那么就会什么也不渲染。
而v-show则是一个改变元素display的指令,只是基于CSS的切换。
v-for
v-for可以根据一组数据的选项列表来进行渲染,语法比较特殊:
-
{{ item.message }}
var example1 = new Vue({
el: '#example-1',
data: {
items: [
{ message: 'Foo' },
{ message: 'Bar' }
]
}
})
其中的items是原数据数组,定义在data里,而item则是数组元素迭代的别名。也可以取整数表示重复。
v-for还支持一个可选参数,当做数组的索引。
-
{{ parentMessage }} - {{ index }} - {{ item.message }}
其中的in也可以被of所替代 。
v-for还可以操作对象,通过一个对象的属性来进行迭代。如果设置第二个参数key,那么就是属性名。
当使用v-for的时候,如果更新已经渲染的元素列表,那么v-for会就地复用,为了方便它可以跟踪每一个节点的身份,所以必须要给一个key值,每项都有唯一的id。
变异方法
这些针对于数组的方法都能够改变原始数组,而非变异方法则不会改变原始数组,而是返回一个新的数组。
和原生js的数组操作方法一样,如push()等。
v-for和v-if
v-for和v-if处于同一节点的时候,v-for比v-if的优先级要高。
表单输入绑定
可以使用v-model指令在表单元素上创建双向绑定。
Message is: {{ message }}
表单输入绑定的修饰符
- .lazy修饰符可以转变为使用change事件时进行同步
- .number 如果想自动给用户的输入值转为数值类型
- .trim 如果要自动过滤用户输入的首尾空白字符
class与style绑定
我们可以给v-bind:class传一个对象,动态的切换class:
方法、计算属性与侦听器
数据我们可以定义在data里,方法我们可以定义在methods里。
当然,除了方法之外,还有一些复杂的逻辑,我们可以使用计算属性。
Original message: "{{ message }}"
Computed reversed message: "{{ reversedMessage }}"
var vm = new Vue({
el: '#example',
data: {
message: 'Hello'
},
computed: {
// 计算属性的 getter
reversedMessage: function () {
// `this` 指向 vm 实例
return this.message.split('').reverse().join('')
}
}
})
与方法不同,计算属性是基于它们的依赖进行缓存的,只在相关依赖发生改变时才会重新求值。
Vue还提供了一种更通用的方式来观察和响应 Vue 实例上的数据变动:侦听属性。当需要在数据变化时执行异步或开销较大的操作时,这个方式是最有用的。
var watchExampleVM = new Vue({
el: '#watch-example',
data: {
question: '',
answer: 'I cannot give you an answer until you ask a question!'
},
watch: {
// 如果 `question` 发生改变,这个函数就会运行
question: function (newQuestion, oldQuestion) {
this.answer = 'Waiting for you to stop typing...'
this.debouncedGetAnswer()
}
}