vue常用知识点总结
感谢本文引用链接的各位大佬们,小菜鸟我只是个搬运工
1.谈一谈你理解的vue是什么样子的?
- vue是数据、视图分离的一个框架,让数据与视图间不会发生直接联系。MVVM
- 组件化:把整体拆分为各个可以复用的个体
- 数据驱动:通过数据变化直接影响bom展示,避免dom操作。
- 可以在原项目的基础上,一两个组件使用vue,也可以使用vue全家桶开发
全家桶:vue-router,vuex, vue-resource,vue-cli,sass样式
这篇文章关于渐进式的解释很好
vue中几个必须要知道的点
2.vue生命周期
一张图总结vue生命周期
需注意created时data已绑定,但DOM未生成,$el不存在,mounted时$el已存在,可以挂载。
这篇文章对vue的生命周期写的很细致,而且有代码可以手动验证每个阶段
3.v-model双向数据绑定
双向绑定就在单向绑定的基础上给可输入元素(input、textare等)添加了change(input)事件,来动态修改model和 view
实现流程:
- 实现一个数据监听器Observer,能够对数据对象的所有属性进行监听,如有变动可拿到最新值并通知订阅者
- 实现一个指令解析器Compile,对每个元素节点的指令进行扫描和解析,根据指令模板替换数据,以及绑定相应的更新函数
- 实现一个Watcher,作为连接Observer和Compile的桥梁,能够订阅并收到每个属性变动的通知,执行指令绑定的相应回调函数,从而更新视图
- mvvm入口函数,整合以上三者
4.虚拟DOM和声明式渲染
- 为什么要减少DOM操作,DOM操作的时间耗在了哪里?
渲染引擎工作:
- 解析HTML代码,生产DOM tree
- 解析CSS样式,结合DOM tree生产Render tree(display: none;的结点不会存在Rendertree上,最后不会被paint)
- 计算Render tree各个节点的布局信息,比如box的位置、尺寸、颜色、外形等
- 根据计算后的布局信息,调用浏览器的UI引擎进行渲染。
而操作dom会产生几种动作,极大的影响渲染的效率。其中 layout(布局)和paint(绘制)是最大的。
- layout 就是布局变动造成重新计算(耗CPU,有时也很耗内存)
- paint 就是调用浏览器UI引擎进行渲染展示页面(耗CPU和内存)
- Virtual DOM算法的步骤如下:
- 用 JavaScript 对象结构表示 DOM 树的结构;
- 然后用这个树构建一个真正的 DOM 树,插到文档当中当状态变更的时候,重新构造一棵新的对象树。
- 然后用新的树和旧的树进行比较,记录两棵树差异把2所记录的差异应用到步骤1所构建的真正的DOM树上,视图就更新了
- 虚拟DOM先是用js模拟dom,主要是使用el
- 然后是对比虚拟的dom树节点的不同,主要用的是深搜
比较两棵虚拟树的差异用的是diff算法,核心是深搜,首先对比DOM树中每层的差异,并标记进行差异,然后使用类似动态规划来求出最小编辑距离
- 声明式渲染
- 命令式渲染 : 命令我们的程序去做什么,程序就会跟着你的命令去一步一步执行
- 声明式渲染 : 我们只需要告诉程序我们想要什么效果,其他的交给程序来做。
5.路由用原生js如何实现
前端中的路由有两种实现方式,一种html5的,另一种就是vue的hashhash路由,就是常见的 # 号,这种方式兼容性更好。
- 切换页面:路由的最大作用就是切换页面,以往后台的路由是直接改变了页面的url方式促使页面刷新。但是前端路由通过 #号不能刷新页面,只能通过 window 的监听事件 hashchange 来监听hash的变化,然后捕获到具体的hash值进行操作,手动下载js
- 注册路由:我们需要把路由规则注册到页面,这样页面在切换的时候才会有不同的效果。
- 异步加载js:一般单页面应用为了性能优化,都会把各个页面的文件拆分开,按需加载,所以路由里面要加入异步加载js文件的功能。异步加载我们就采用最简单的原生方法,创建script标签,动态引入js。
- 参数传递:在我们动态引入单独模块的js之后,我们可能需要给这个模块传递一些单独的参数。这里借鉴了一下jsonp的处理方式,我们把单独模块的js包装成一个函数,提供一个全局的回调方法,加载完成时候再调用回调函数。
流程:
来自这篇文章,讲的很细致
这个也作为参考,代码简单一些,但和上一篇略有不同
6.vue中组件通信
挺好理解的,就是创建一个中央事件总线做为通信桥梁,需要传值的组件中用bus.$emit触发一个自定义事件,并传递参数,在需要接收数据的组件中用bus.$on监听自定义事件,并在回调函数中处理传递过来的参数
平级组件通信
父子组件通信
vue常用知识点总结的更多相关文章
- vue常用知识点
vue中图片路径写法 <img :src="avatorSrc" alt=""> <img :src="avatorSrc2&quo ...
- vue 常用知识点
1.数据变更,页面渲染完成 this.$nextTick(function(){ alert('v-for渲染已经完成') }) 2.iview select组件 setQuery用法 <Sel ...
- 【Vue】Vue框架常用知识点 Vue的模板语法、计算属性与侦听器、条件渲染、列表渲染、Class与Style绑定介绍与基本的用法
Vue框架常用知识点 文章目录 Vue框架常用知识点 知识点解释 第一个vue应用 模板语法 计算属性与侦听器 条件渲染.列表渲染.Class与Style绑定 知识点解释 vue框架知识体系 [1]基 ...
- vue API 知识点(2)---选项总结
一.选项 / 数据 1.data 当一个组件被定义,data 必须声明为返回一个初始数据对象的函数,因为组件可能被用来创建多个实例,如果 data 仍然是一个纯碎的对象,则所有的实例将被共享引用同一个 ...
- DB2_SQL_常用知识点&实践
DB2_SQL_常用知识点&实践 一.删除表中的数据(delete或truncate) 1 truncate table T_USER immediate; 说明:Truncate是一个能够快 ...
- Vue常用经典开源项目汇总参考-海量
Vue常用经典开源项目汇总参考-海量 Vue是什么? Vue.js(读音 /vjuː/, 类似于 view) 是一套构建用户界面的 渐进式框架.与其他重量级框架不同的是,Vue 采用自底向上增量开发的 ...
- JAVA常用知识点及面试题总结
1. String.StringBuffer.StringBuilder三者区别? (1)三者在执行速率上的比较: String<StringBuffer<StringBuilder 原因 ...
- HTML常用知识点代码演示
1 HTML部分常用知识点 <!-- 版本声明 --> <!DOCTYPE html> <!-- 唯一根元素 --> <html> <!-- 对网 ...
- Java 常用知识点
Java 常用知识点 1.日期格式化 SimpleDateFormat Date date=new Date(System.currentTimeMillis()) ; SimpleDateForma ...
随机推荐
- mysql事务、隔离级别
一.事务简介 事务是一组操作的集合,它是一一个不可分割的工作单位,事务会把所有的操作作为- -个整体一起向系统提交或撤销操作请求,即这些操作要么同时成功,要么同时失败. 二.有关事务操作 mysql中 ...
- 专业3 Cookie 和Session的使用及原理
Cookie的使用及原理 什么是cookie cookie是一种用来跟踪和识别用户上网信息的会话控制技术,它将跟踪后的信息存储在客户端的浏览器上 cookie如何使用 第一步:设置cookie即可(告 ...
- php 23种设计模型 - 策略模式
介绍 意图:定义一系列的算法,把它们一个个封装起来, 并且使它们可相互替换,用户还不需要知道其具体的实现 主要解决:在有多种算法相似的情况下,使用 if...else 所带来的复杂和难以维护. 何时使 ...
- Mybatis 多对一和一对多 学习总结04
1.Mybatis 组件的声明周期 声明周期是组件的重要问题,Mybatis也常用语多线程环境,错误使用会造成多线程并发问题,为正确编写Mybatis应用程序,我们要掌握Mybatis组件的声明周 ...
- 题解 P1659 【[国家集训队]拉拉队排练】
一眼可得PAM 如果没学过PAM的可以看这里:PAM学习小结 我们令PAM上多记录一个信息\(sum\),表示该节点表示串在原串上出现了多少次. 当我们处理完了\(sum\),对于长度\(len\)为 ...
- LGP2155题解
lg最优解来写题解啦( 题目大意: 多测: \[\sum_{i=1}^{n!}[\gcd(i,m!)=1] \] 根据 \(\gcd\) 的结论,我们可以得到答案其实是: \[\frac {n!} { ...
- Linux 环境下安装 Nexus 私服存储库
镜像下载.域名解析.时间同步请点击阿里云开源镜像站 一.nexus私服存储库简介 Nexus 是一个强大的maven仓库管理器,它极大地简化了本地内部仓库的维护和外部仓库的访问.,还可以用来创建yum ...
- 基于EMR离线数据分析-反馈有礼
"云上漫步"第三期-反馈有礼 参与体验产品,提交反馈,就有机会获得定制背包,T恤,超萌虎年鼠标垫,以及5到100元阿里云通用代金券~ 反馈地址: https://developer ...
- 集合 copy
#集合的创建 # set = set(["barry",1,2]) # print(set) # set1 = {1,2,3} #集合的增 # set1 = {'alex','wu ...
- Key-Value存储系统简介
Redis是一个Key-Value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).list(链表).set(集合)和zset(有序集合).这些数据类 ...