Vue2知识回顾
本文最后更新于 2024-10-26,文章内容可能已经过时。
为什么要选择Vue?
Vue
最大的特点就是帮我们简化了对dom的操作
,其中包含了数据响应式
,以及组件化
!
响应式
: 当数据发生变化
时,界面会自动刷新数据
!
组件化
: 将业务公共区域封装成组件
,进行代码复用
,减少了开发的效率
!
响应式图形
以上是
MVVM
的一个模型图
M
代表着(Model
)数据层
VM
代表着(ViewModel
) 中间层!
V
代表着(View
)视图层
Model层
发生变化时,ViewModel
会通过拦截监听
,将变动的数据同时更新到View视图当中
!
在html
中使用vue
使用有多种方式,其中有
cdn外链 npm镜像
以及vue-cli脚手架
方式,具体可参考官方安装方式进行使用!https://v2.cn.vuejs.org/v2/guide/installation.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<script src="https://cdn.jsdelivr.net/npm/vue@2.7.16"></script>
<title>Document</title>
</head>
<body>
<div id="app-container">{{ msg }}</div>
</body>
<script>
// 创建一个Vue实例
const vm = new Vue({
el: "#app-container",
data: {
msg: "Hello World",
},
methods: {
onChange(){
console.log("this:", this === vm)
}
}
});
</script>
</html>
vue实例
中传入一些配置对象
!
el:
标识vue
实例要挂载dom的区域
,在这个区域内,vue
会实现dom
内一些语法转换!
data:
初始化数据
都会存放在这个对象当中,如model层
!
vue核心概念
注入
vue
在创建实例时,会将data
以及method
里的属性和方法
,提取到vue实例
当中,这么做是为了做数据响应式
,以及this绑定!
数据响应式:
vue
通过Object.defineProperty()
方法,实现对象属性的拦截
,并且会对每个属性添加getter和setter方法
!
this绑定:
在methods
方法中,this指向的是vue实例
,在初始化时,vue
会将methods
中的函数通过bind形式将this指向vue实例!
虚拟dom
vue
中,虚拟dom
就是用来减少dom操作
的,提高渲染效率
!
虚拟dom
就是vnode
,通过js的对象的形式来描述dom树的结构
,当数据发生变化
时,vue会将虚拟dom
与真实dom
进行差异比较
,找到最小的更新点进行更新
!
生成虚拟dom的方式
配置项中,
el
所挂载的元素,vue
会将元素的outerHtml
来作为模版!在
template
标签内写入的dom
元素会作为vue
模版!在
render
函数中生成的元素也会作为模版来使用!
// 创建一个Vue实例
const vm = new Vue({
el: "#app-container",
template: `<div id="app-container">{{ msg }}</div>`,
render(h) {
return h("div", { attrs: { id: "app-container" } }, [ "helloworld" ]);
},
data: {
msg: "Hello World",
},
});
console.log("vm", vm);
模版根节点
在
vue
中,template
模版根节点只能存在一个
!无法存在
多个根节点
,这会导致在生成虚拟dom时
,无法进行差异比对
!
<template>
<div class="container"></div>
<div class="container2"></div>
</template>
vue 基础使用
vue指令
指令 |
可选值 |
描述 |
---|---|---|
v-show |
true/false |
该元素是否显示,true 显示,false 为隐藏,该元素通过css属性display 控制! |
v-if |
true/false |
该元素是否显示,true显示,false为隐藏,该元素若为false ,则不会渲染该元素 ! |
v-for |
arr or obj |
可迭代项,可以遍历数组和对象属性 ! |
v-html |
string |
可包含html元素 ,并在页面上进行渲染 |
v-on |
string |
可以绑定事件,简写形式@change=handleChange |
v-bind |
any |
单项数据流 ,可以元素属性绑定动态值,例如 style class 等... |
v-model |
any |
双向绑定 ,在可交互表单中使用,可以实现双向数据绑定! |
指令修饰符
表单修饰符
修饰符 | 说明 |
---|---|
.lazy |
取代 v-model 的默认 change 事件,数据只会在 change 事件结束后 更新。 |
.number |
输入字符串转为数值类型。 |
.trim |
自动过滤首尾空格。 |
事件修饰符
修饰符 | 说明 |
---|---|
.stop |
阻止事件冒泡。 |
.prevent |
阻止默认事件。 |
.capture |
添加事件捕获。 |
.self |
只当事件在该元素本身触发时触发回调。 |
.once |
只触发一次回调。 |
.passive |
滚动事件的默认行为立即生效,不会等待 onscroll 事件完成。 |
按键修饰符
@keyup.enter="onEnter"
修饰符 | 说明 |
---|---|
.enter |
按下 enter 键时触发。 |
.tab |
按下 tab 键时触发。 |
.delete (捕获) |
按下 delete 键时触发。 |
.esc |
按下 esc 键时触发。 |
.space |
按下 space 键时触发。 |
.up |
按下 up 键时触发。 |
.down |
按下 down 键时触发。 |
.left |
按下 left 键时触发。 |
.right |
按下 right 键时触发。 |
keyCode |
按下指定按键时触发。 |
系统修饰符
修饰符 | 说明 |
---|---|
.ctrl |
按下 ctrl 键时触发。 |
.alt |
按下 alt 键时触发。 |
.shift |
按下 shift 键时触发。 |
.meta |
按下 meta 键时触发。 |
鼠标修饰符
修饰符 | 说明 |
---|---|
.left |
左键单击。 |
.right |
右键单击。 |
.middle |
中键单击。 |
.dblclick |
双击。 |