Vue核心概念及特性 (一)
Vue (读音 /vjuː/,类似于 view) 是一套用于构建用户界面的渐进式框架。
特点: 易用,灵活,高效 渐进式框架
可以随意组合需要用到的模块 vue + components + vue-router + vuex + vue-cli
一.Vue的概念和特性
1.什么是库,什么是框架?
react 用于构建用户界面的JavaScript 库
- 库是将代码集合成一个产品,库是我们调用库中的方法实现自己的功能。(jquery、react)
- 框架则是为解决一类问题而开发的产品,框架是我们在指定的位置编写好代码,框架帮我们调用。
框架与库之间最本质区别在于控制权:you call libs, frameworks call you
Vue属于框架
2.MVC模型 && MVVM模型
在传统的mvc中除了model和view以外的逻辑都放在了controller中,导致controller逻辑复杂难以维护,在mvvm中view和model没有直接的关系,全部通过viewModel进行交互。
可以将html页面看出View,数据看成Model,不需要关系两者之间是如何交互的,不需要关心这个核心调度者,我们写数据会自动放到View上,页面上的数据变化了也会自动更新Model。
Vue是MVVM模式
3.声明式和命令式
- 自己写for循环就是命令式 (命令其按照自己的方式得到结果)(delete obj[key] 、 target[key]=val)
- 声明式就是利用数组的方法forEach、map (我们想要的是循环,内部帮我们去做,我们并不知道map内部是如何的,但是它可以帮我们实现功能)
区别是:声明式方便应用,命令式 自己可以控制里面的逻辑。Vue是一个声明式框架,要按照它自己的逻辑去写,不能更改它的逻辑。
二.Vue的基本使用
1.安装
1 | npm init -y |
2.使用
2.1. 基础使用
新建index.html
1 |
|
2.2 响应式数据变化
Vue中使用Object.defineProperty
重新将对象中的属性定义,如果是数组的话需要重写数组原型上的方法
1 | <body> |
新建observe.js
观察一个数据 Vue2.0 definePrototype 看mdn上可以知道definePrototype重定义数组的 length 时会有兼容问题所以
这里只针对对象 数组没有使用definePrototype
- 1) 增加不存在的属性,不能更新视图(vm.$set 可以)
1 | // observer.js |
- 2) vue默认会递归所有数据,增加getter setter
1 | // observer.js |
特点: 使用对象的时候必须先声明属性,这个属性才是响应式的
1 | function observer(obj){ |
数组
- 3) 数组里套对象 对象是支持响应式变化的,如果是常量则不可以
- 4) 修改数组索引和长度是不会更新视图的
1 | // 数组 |
现在希望更新数组也能更新视图 见index.html
1 |
|
重写 push unshift splice
1 | // observer.js |
3.Vue实例上的方法
- vm.$el;
- vm.$data;
- vm.$options;
- vm.$nextTick();
- vm.$watch();
- vm.$set();
新建 instance.html
1】
1 | <body> |
2】
1 | <body> |
3】
1 | <body> |
4】
1 | <body> |
三.Vue中的指令
在vue中 指令 (Directives) 是带有 v- 前缀的特殊特性,主要的功能就是操作DOM
v-for
1 | <template v-for="(fruit,index) in fruits" > |
多个元素循环时外层需要增加
template
标签,需要给真实元素增加key
,而且key
不能重复,尽量不要采用索引作为key
的值
举个key
值的例子:
新建 drective.html
1 | <body> |
结果如图:
四.面试题环节
- 请说下对于MVVM的理解
- Vue实现数据双向绑定的原理
- Vue常用的指令有哪些?
- v-model的原理
- v-if 和 v-show 区别
- Vue中 key 值的作用