Vue2知识点简要

这篇具有很好参考价值的文章主要介绍了Vue2知识点简要。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、双向绑定原理

  Vue2采用的是观察者-发布订阅模式,利用Object.defineProperty实现对数据已定义属性的监控(定义观察者模式),

  编译DOM时解析v-model等属性以及对input框等注册事件实现UI和JS的交互(也就是注册发布订阅这模式);

  详细的是主要是定义一个Observe类实现对象的监控,通过Compile方法来解析DOM中的指令和替换DOM,每当遇到一个v-、{{}}等属性

  则生成一个Watcher,同时将Watcher添加到Dep中,当有属性变化时则轮循Dep中所有的Watcher进行UI更新等操作

二、框架的优缺点

  优点:1. 轻量级、提供了响应式编程概念,组件化思想

     2. 采用虚拟DOM,渲染效率高

     3. 生态完整

  缺点:1. 由于页面内容都是基于JS,所以SEO方面不是很友好

三、虚拟DOM和Diff算法

  虚拟DOM:web项目中比较消耗性能的就包含DOM的重排、重绘以及不断的读取DOM,但是JS的计算性能要比DOM的好很多,所以基于这个原因,Vue通过

        生成虚拟DOM,记录DOM节点名称、类型、属性以及事件等各种属性,当数据有变化时,通过DIF算法对比新旧虚拟DOM,以最小的性能代价找到DOM变化点,

        然后只更新变化的DOM即可。

  Diff算法简述:1. 为了提升性能,Diff算法对比节点是只对比同一级节点,不做跨级对比

          2. 对比节点,如果节点类型不同,则替换节点、类型相同则替换属性或者文本、节点不存在则删除、节点新增则增加

 

          3. 如果存在子节点,设置头尾指针,从节点两端同时进行对比,同时移动指针下标值,如果endIndex>startIndex则终止循环

 四、生命周期及其作用

  1. beforeCreate: 初始化Vue实例,同时初始化周期事件,但是并没有解析出$el以及没有绑定data

  2. created: 此时数据已经绑定,未解析出$el,但是$data已经绑定到vue中,这之后,beforeMount之前会判断是否含有el元素,

        没有则生命周期结束(当执行$mount(el)时,继续后续功能,因为此时已有$el),如果有则继续判断是否有template,

        有temp,则编译生成render函数,否则编译outerHtml,如果要在created阶段中进行dom操作,就要将操作都放在 Vue.nextTick() 的回调函数中

  3. beforeMount: 完成data和el数据初始化,但是页面中还是用vue占位符

  4. mounted: 载入后html已经渲染(ajax请求可以放在这个函数中),把vue实例中的data里的message挂载到BOM节点中去

  5. beforeUpdate: 重新渲染之前触发,然后vue的虚拟dom机制会重新构建虚拟dom与上一次的虚拟dom树利用diff算法进行对比之后重新渲染

  6. updated: 数据更新完成,dom也重新render完成

  7. beforeDestory: 销毁前执行($destroy方法被调用的时候就会执行),一般在这里善后:清除计时器、清除非指令绑定的事件等等…’)

  8. destoryed: 销毁后 (Dom元素存在,只是不再受vue控制),卸载watcher、事件监听、子组件等

五、组件间通信方式

  1. 父传子:采用v-model与props的方式进行通信,但是是单向的,子组件该值的改变并不会影响父组件;还可以采用Vuex

  2. 子传父:采用@emit事件由子组件向父组件冒泡数据或者采用$on的方式调用子组件的方式回调传递数据,同样也是单向的;还可以采用Vuex

  3. 兄弟组件:创建eventBus事件总线通讯,简单方便不受兄弟组件的层级关系限制;子1上报给父,父下发给子2,数据传递逻辑较乱,不能适用于多层级的兄弟关系;还可以采用Vuex

  4. 父子组件的值同步修改:父组件中绑定v-model:example,子组件设置emits: ['update:example'], 当子修改后,采用$emit('update:example')就可以将父组件的值同步改变

六、Vuex的使用

  组件之间经常会有数据之间相互通信,但是多层嵌套传值复杂度就会增加。因此vuex就是把常用的变量抽取出来组成一个全局单例模式进行管理,
  将共享的数据放到vuex,任何组件都可以使用,一旦数据修改,所有引用数据的组件的值都会同步修改,通过commit('***')进行修改,通过mapState把全局的state和getters映射到组件中,

  总共有五个属性:

  state: 存放一些状态(简单说就是变量),状态被修改后,所有引用的地方都会修改

  getters: 有时候需要从state中派生出一些状态,比如对状态根据某个条件进行过滤

  mutations:定义如何修改state中的状态,更新state值的唯一方法就是提交mutation,比如:store.commit('****')

  action:专门用来解决mutations只有同步无异步的问题,使用commit赋值

  modules:项目特别复杂的时候,可以让每一个模块拥有自己的state、mutation、action、getters,使得结构非常清晰,方便管理

七、路由的使用

  1. 全局路由:beforeEach、afterEach方法当导航触发时会被顺序执行,可以进行添加token以及做跳转拦截等

  2. 单个路由:beforeEnter

  3. 组件间路由:beforeRouteEnter beforeRouteUpdate  beforeRouteLeave

八、需要注意的知识点

  1. v-model和v-bind的差别:

    v-bind是单向绑定或者叫属性绑定,支持修改属性值,可简写为:attr
    v-model是双向绑定,可用在输入标签中
    v-bind和v-model同时使用时 model优先级更高

  2. 为什么数组的值变化了不能同步更新到UI:

    Vue2对数据的监听主要是通过defineProperty方法实现的,通过试验可以得知该方法可以监控已有属性的变化,但是Vue2依旧没有实现这个能力

    原因主要是考虑到性能问题:一个对象的属性个数一般是有限的,所以对属性进行监控消耗性能不大,但是数组可能会有成千上万,

    对每个属性监控性能消耗太大,付出和用户体验不成正比,故而没有实现

  3. computed和watch的使用和区别:  

    都是以vue的依赖追踪机制为基础,都是为了当某一个数据发生变化时,所有依赖这个数据的数据发生变化
    watch: 一个数据影响多个数据
    computed:一个数据受多个数据影响,支持set、get方法(默认是get),有缓存效果文章来源地址https://www.toymoban.com/news/detail-473178.html

到了这里,关于Vue2知识点简要的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Vue2和vue3中双向数据绑定的原理,ES6的Proxy对象代理和JavaScript的Object.defineProperty,使用详细

    简介: Object.defineProperty大家都知道,是vue2中双向数据绑定的原理,它 是 JavaScript 中一个强大且常用的方法,用于定义对象属性,允许我们精确地控制属性的行为,包括读取、写入和删除等操作; 而Proxy是vue3中双向数据绑定的原理,是ES6中一种用于创建代理对象的特殊对象,

    2024年02月15日
    浏览(38)
  • react和vue2/3父子组件的双向绑定

    目录 Vue3 父子传值:props(attrs)/emit 父传子 props 父child :属性名=\\\"变量\\\" 子props=defineProps({属性名:type...}) attrs父作用域(除 class、 style 、 props )属性集合 父child :属性名=\\\"变量\\\",属性名=\\\"常量\\\" 子 attrs = useAttrs() 子传父emits+@=v-on: 父child @事件名\\\"=\\\"parentClick\\\",parentClick(msg) 子emi

    2024年02月16日
    浏览(33)
  • vue父子组件之间双向数据绑定的(vue2/vue3)

    vue父子组件之间双向数据绑定的四种方法(vue2/vue3) vue考虑到组件的可维护性,是不允许子组件改变父组件传的props值的。父组件通过绑定属性的方式向子组件传值,而在子组件中可以通过$emit向父组件通信(第一种方式),通过这种间接的方式改变父组件的data,从而实现子组

    2024年02月08日
    浏览(57)
  • 在vue2使用v-model对组件进行双向绑定

    v-model=“visible” 等价于 :value=“visible” 加上 @input=“visible = $event” 所以 v-model 就是父组件向子组件传了个 value 字段的值,子组件使用 props 定义 value 字段, 就可以在子组件使用 value 读取这个值;子组件使用 $emit(‘input’,值) 就可以改变 v-model 的值 父组件 子组件 父组件 子

    2024年02月10日
    浏览(34)
  • 微机原理(8086基本知识点)

    一.8086介绍     8086是16位的处理器,数据总线为16位,地址总线为20位,分为BIU(Bus Interface Unit)与EU(Execution Unit),外部引脚总共40个,左边从上到下编号为1~20,右边从下到上编号为21~40。 二.8086编程结构 1.通用寄存器 AX(Accumulate Register),BX(Base Register),CX(Count Register)

    2024年02月11日
    浏览(25)
  • VUE数据双向绑定原理解析

    在Vue.js中,数据双向绑定是一项非常强大的功能。它使开发者能够轻松地将模板与数据进行动态关联,实现了页面和数据之间的实时同步更新。本文将深入探讨VUE中数据双向绑定的原理,并通过代码示例演示其工作机制。 VUE使用了JavaScript对象属性的 Object.defineProperty() 方法来

    2024年02月11日
    浏览(30)
  • Vue双向绑定的原理是什么?

    在 Vue 中,双向绑定是指数据的变化会同时反映在视图上,而视图的变化也会同步更新数据。Vue 的双向绑定是通过以下原理实现的: 数据响应系统(Reactivity System):Vue 使用了响应式的数据绑定机制。当你在 Vue 实例中的数据属性上使用 data 选项定义数据时,Vue 会通过 Obje

    2024年02月08日
    浏览(46)
  • 【并发知识点】CAS的实现原理及应用

    AQS的实现原理及应用 CAS的实现原理及应用 本章节介绍CAS概念、实现原理,并通过java代码应用,最终模拟赛龙舟比赛。 CAS的全称为:CompareAndSwap,直译为对比和交换。 CAS实际是普遍处理器都支持的一条指令,这条指令通过判断当前内存值V、旧的预期值A、即将更新的值B是否相

    2024年02月10日
    浏览(34)
  • Vue中双向数据绑定及底层原理

    Vue中的双向数据绑定是指数据的变化可以自动更新到视图,同时用户在视图上的操作也可以同步更新到数据。这种机制使得开发者无需手动操作DOM来实现数据与视图的同步。 Vue实现双向数据绑定的底层原理主要包括以下几个方面: 数据劫持:Vue通过使用 Object.defineProperty 方法

    2024年02月09日
    浏览(26)
  • Vue双向数据绑定原理(面试必问)

    1、前端面试题库 ( 面试必备)             推荐:★★★★★ 地址:前端面试题库   vue.js是采用数据劫持结合发布者-订阅者模式的方式,通过Object.defineProperty()来劫持各个属性的setter,getter,在数据变动时发布消息给订阅者,触发相应的监听回调来渲染视图。 具体步骤

    2023年04月08日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包