1.Vue核心

231 阅读7分钟

一、Vue简介

1.定义

image.png

image.png

2.开发者

image.png

3.特点

组件化模式

image.png

声明式编码

image.png

使用虚拟DOM

image.png

数据改变后,页面中的DOM全部替换。原生js可以实现复用,要自己写逻辑,但数据量大时效率低。

image.png

只渲染了最小范围的更新过的虚拟DOM

二、初识Vue

1.Hello 案例

(1)引入vue

image.png

引入vue后,多了个全局的vue构造函数

(2)准备一个容器

image.png

插值语法:{{ }}

(3)创建vue实例

image.png

new Vue() 的时候只传一个参数,这个参数是一个对象(配置对象)

(4)vue实例的参数

image.png

el:用于指定当前vue实例服务于哪个容器,值通常为选择器字符串

data:{

1.用于存储数据,数据供el中指定的容器去使用

2.值暂时写成一个对象

}

data多级结构

image.png

总结:

image.png

image.png

js表达式

image.png

2.el和data的两种写法

(1)el的两种写法

image.png

v是Vue的一个实例对象,$mount是vue实例对象的proto里面的属性

image.png

image.png

与计时器连用,灵活性更高

(2)data的两种写法

image.png

第二种写法data是用函数返回一个对象,这个函数是由Vue调用的

总结:

image.png

三、Vue模板语法

1.插值语法

{{ }}用于解析标签体内容,也可以放函数 ,放函数要加( )

image.png

2.指令语法

v-bind:vue会把“ ”中的内容当成js表达式去解析,不加v-bind则是把“ ”中内容当字符串

image.png 注意:v-bind:可以简写成

总结:

image.png

四、数据绑定

1.单向绑定

image.png

2.双向绑定

image.png

总结:

image.png

注意:

image.png

五、理解MVVM模型

image.png

image.png

所以创建vue实例对象时,名字用vm

总结:

image.png

vm上的属性

image.png

Vue原型上的属性

image.png

image.png

都可以在vue模板中直接使用而不需要使用vm.$options

六、数据代理

1.Object.defineProperty

用于操作对象的属性

image.png

1.1 Object.defineProperty() 的基本属性

  • Object.defineProperty() 添加的属性,枚举对象时不参与遍历,除非添加enumerable:true

image.png

  • Object.defineProperty() 添加的属性,修改时不生效,除非添加writable:true

image.png

  • Object.defineProperty() 添加的属性,删除时不生效,除非添加configurable:true

image.png

1.2 getter和setter

image.png 简写形式

image.png

image.png

image.png

2. 数据代理

2.1 定义

数据代理:通过一个对象代理对另一个对象中属性的操作(读、写)

用obj2来代理obj,通过obj2来操作obj里面的属性

image.png

2.2vue中的数据代理

image.png

vm中的address和name属性,修改时会调用setter方法,点击获取时会调用getter方法

(1)收集数据

vue为vm准备的东西,已经足够我们在代码中访问name和address属性

image.png

(2)数据代理

把data中的属性数据放到vm中一份,为了编码更方便

image.png

总结

image.png

image.png

七、事件处理

1.事件的基本使用

image.png

image.png

注意:

1.被vue管理的函数都写成普通函数的形式,不要用箭头函数形式,否则this不指向vue实例而是指向window对象

2.v-on:click的简写形式 @click

3.回调函数:不传参就不加括号,传参就加括号

image.png 传参的时候想获取事件对象,需用$event

4.methods里的方法没有做数据代理,因为函数只需调用,不需要修改而data中的变量需要改变。

总结:

image.png

2.事件修饰符

2.1原生

image.png

image.png

2.2vue中事件修饰符

image.png

注意:阻止事件冒泡加在内层子元素上

image.png

self修饰符也可以阻止事件冒泡

image.png

3.键盘事件

3.1键盘事件

keyup、keydown

用原生的事件对象的keyCode来判断按下了哪个按键

image.png

vue中不用自行判读键盘按下的是哪个键,vue给常用按键起了别名

image.png

3.2vue中按键别名

image.png

image.png

image.png

不推荐:

image.png

注意:tab键:可以切换焦点,tab键最好和keydown连用,因为按下tab键还没等到弹起来的时候焦点已经切走了

4.事件总结

4.1事件修饰符可以连用

image.png

4.2 指定和系统修饰符配合使用的按键

image.png

八、计算属性

image.png

vue官方建议插值语法的内容应尽量简单,所以我们在methods中定义方法进行操作

image.png

只要data中数据发生改变,vue就重新解析模板,插值语法中的方法就重新调用一遍

1.概念

data{ }对象 :存放属性,

computed{ }对象 :存放计算属性

image.png

计算属性的内容可能很繁琐,所以定义成对象形式

2.使用

image.png

image.png

image.png

计算属性有缓存,不是每次获取都要重新计算,当它依赖的属性发生变化时,才会重新计算。

data和methods中的属性和方法,写啥就是啥,都会按本身性质出现在vm中。而对于计算属性,vm会把fullName中的get( )调用,把返回值存在vm中,并取名为fullName。

因此,计算属性直接读取使用!!不要写成fullName.get( ),不是调用函数!!

3.计算属性总结

image.png

4.计算属性简写

确定只读不改的时候,计算属性可以去掉set方法

fullName不再写成配置对象形式,而是写成函数,当成get( )使用

image.png

5.案例:计算价格

image.png

九、监视属性

点击实现天气切换

image.png

1.使用

监视属性写成对象形式,因为可能有很多配置项

image.png

注意:immediate:true,表示初始化时就调用handler函数

监视属性可以监视data中的属性,也可以监视计算属性

2.总结

image.png

3.深度监视

image.png

image.png

4.监视的简写

当配置项中不需要其他属性,只需要方法时,可以简写

image.png

image.png

5.案例:计算文本框字数

image.png

6.监视属性和计算属性的区别

监视属性(侦听属性)和计算属性往往可以实现同一个功能,对比选取最优方案:

1.两种方法都能实现的时候,选computed计算属性

2.涉及异步计算,我们选用watch监视属性

  • 计算属性姓名案例

image.png

  • 侦听属性姓名案例

image.png

image.png

注意:

1.计算属性不能开启异步任务 (比如用定时器);侦听属性可以配合定时器使用

2.计算属性不需要写在data中,有return返回值;侦听属性写在data中,没有返回值

image.png

十、绑定样式

1.class

image.png

  • 字符串写法:适用于样式的个数只有一个,类名不确定

image.png

  • 数组写法:适用于要绑定的样式个数不确定,类名也不确定

image.png 通过对arr数组的增删,实现动态绑定类名

  • 对象写法:适用于要绑定的样式个数确定,类名也确定

image.png

2.style

行内样式

image.png

image.png

3.总结

image.png

十一、条件渲染

1.v-show

隐藏时节点html结构依旧存在

image.png

2.v-if

隐藏时节点html结构也不在了

image.png

v-else 后面一般不加判断条件

image.png

注意:

image.png

3.区别

v-show 适用于变化的很频繁的情况,因为DOM节点一直存在

v-if 适用于变化频率不高,因为要一直添加删除DOM节点,耗时

image.png

4.总结

image.png

十二、列表渲染

1.遍历基本列表

(1)遍历数组

image.png

image.png

in也可以用of替代

image.png

(2)遍历对象

image.png

(3)遍历字符串

image.png

(4)遍历指定次数

image.png

总结:

image.png

2.key作用与原理(面试)

2.1index作为key时

image.png

DOM少有复用,效率很低

2.2id作为key时

image.png

无论“老刘加在数组前面还是后面”,都不影响DOM复用率

2.3总结

image.png

有唯一标识,尽量使用唯一标识作为key,不指定key的话vue自己不知道

3.列表过滤(模糊搜索)

3.1用watch实现

(1)搜集用户输入

image.png

(2)监听输入改变

image.png

(3)数组过滤

filter不会改变原数组,会返回一个新数组

image.png

image.png

3.2用computed实现

简单点,优先选择

image.png

4.列表排序

sort改变原数组,a-b为升序,b-a为降序

image.png

image.png

image.png

5.vue监测数据改变的原理

image.png

?????六集没看,后续再补

image.png

十三、收集表单数据

十四、过滤器

十五、内置指令

image.png

1.v-text

image.png 插值语法更推荐,可以随意拼接

总结:

image.png

2.v-html

image.png

cookie的作用

image.png

image.png

盗取cookie

image.png

总结:

image.png

3.v-cloak

v-cloak配合css解决页面闪烁(防止未经解析的模板出现在页面中)

结构跑到页面上先隐藏,等vue介入的时候,v-cloak消失,节点出现并渲染

image.png

总结:

image.png

4.v-once

image.png

总结:

image.png

5.v-pre

image.png

总结:

image.png

十六、自定义指令

1.函数式

image.png

image.png

通过操作原生DOM来实现功能需求

函数被调用的情况

1.指令与元素成功绑定时(一上来)

2.指令所在模板被重新解析时

2.对象式

image.png

bind、inserted、update类似于生命周期钩子函数

3.总结

(1)命名方式

image.png

(2)this指向

image.png

(3)全局指令

把对象式自定义指令变为全局指令

image.png

把函数式自定义指令变为全局指令

image.png

总结:

image.png

十七、生命周期

每一个vue实例从创建到销毁的过程,就是这个vue实例的生命周期

在这个过程中,他经历了从开始创建、初始化数据、编译模板、挂载Dom、渲染→更新→渲染、卸载等一系列过程。

image.png

1.挂载流程

image.png

image.png

image.png

2.更新流程

image.png

3.销毁流程

image.png

image.png

image.png

vue实例被销毁以后,该事件依然有效

4.总结

image.png

关闭定时器,beforeDestroy的应用

image.png

image.png