当前位置: 首页 > news >正文

外贸网站策划微信朋友圈产品推广语

外贸网站策划,微信朋友圈产品推广语,免费做国际网站有哪些,幼儿园网站建设文章目录 1. 前言2. 销毁阶段分析3. 总结 1. 前言 接下来到了生命周期流程的最后一个阶段——销毁阶段。从官方文档给出的生命周期流程图中可以看到,当调用了vm.$destroy方法,Vue实例就进入了销毁阶段,该阶段所做的主要工作是将当前的Vue实例…

文章目录

    • 1. 前言
    • 2. 销毁阶段分析
    • 3. 总结

1. 前言

接下来到了生命周期流程的最后一个阶段——销毁阶段。从官方文档给出的生命周期流程图中可以看到,当调用了vm.$destroy方法,Vue实例就进入了销毁阶段,该阶段所做的主要工作是将当前的Vue实例从其父级实例中删除,取消当前实例上的所有依赖追踪并且移除实例上的所有事件监听器。也就是说,当这个阶段完成之后,当前的Vue实例的整个生命流程就全部走完了,最终“寿终正寝”了。

img

本篇文章就来分析一下在销毁阶段都做了哪些工作。

2. 销毁阶段分析

上文说了,当调用了实例的$destroy方法之后,当前实例就进入了销毁阶段。所以分析销毁阶段就是分析$destroy方法的内部实现。该方法的定义位于源码的src/core/instance.lifecycle.js中,如下:

Vue.prototype.$destroy = function () {const vm: Component = thisif (vm._isBeingDestroyed) {return}callHook(vm, 'beforeDestroy')vm._isBeingDestroyed = true// remove self from parentconst parent = vm.$parentif (parent && !parent._isBeingDestroyed && !vm.$options.abstract) {remove(parent.$children, vm)}// teardown watchersif (vm._watcher) {vm._watcher.teardown()}let i = vm._watchers.lengthwhile (i--) {vm._watchers[i].teardown()}// remove reference from data ob// frozen object may not have observer.if (vm._data.__ob__) {vm._data.__ob__.vmCount--}// call the last hook...vm._isDestroyed = true// invoke destroy hooks on current rendered treevm.__patch__(vm._vnode, null)// fire destroyed hookcallHook(vm, 'destroyed')// turn off all instance listeners.vm.$off()// remove __vue__ referenceif (vm.$el) {vm.$el.__vue__ = null}// release circular reference (##6759)if (vm.$vnode) {vm.$vnode.parent = null}
}

可以看到,在上述代码中,首先判断当前实例的_isBeingDestroyed属性是否为true,因为该属性标志着当前实例是否处于正在被销毁的状态,如果它为true,则直接return退出函数,防止反复执行销毁逻辑。如下:

const vm: Component = this
if (vm._isBeingDestroyed) {return
}

接着,触发生命周期钩子函数beforeDestroy,该钩子函数的调用标志着当前实例正式开始销毁。如下:

callHook(vm, 'beforeDestroy')

接下来,就进入了当前实例销毁的真正逻辑。

首先,需要将当前的Vue实例从其父级实例中删除,如下:

const parent = vm.$parent
if (parent && !parent._isBeingDestroyed && !vm.$options.abstract) {remove(parent.$children, vm)
}

上面代码表示:如果当前实例有父级实例,同时该父级实例没有被销毁并且不是抽象组件,那么就将当前实例从其父级实例的$children属性中删除,即将自己从父级实例的子实例列表中删除。

把自己从父级实例的子实例列表中删除之后,接下来就开始将自己身上的依赖追踪和事件监听移除。

我们知道, 实例身上的依赖包含两部分:一部分是实例自身依赖其他数据,需要将实例自身从其他数据的依赖列表中删除;另一部分是实例内的数据对其他数据的依赖(如用户使用$watch创建的依赖),也需要从其他数据的依赖列表中删除实例内数据。所以删除依赖的时候需要将这两部分依赖都删除掉。如下:

// teardown watchers
if (vm._watcher) {vm._watcher.teardown()
}
let i = vm._watchers.length
while (i--) {vm._watchers[i].teardown()
}

在上述代码中,首先执行vm._watcher.teardown()将实例自身从其他数据的依赖列表中删除,teardown方法的作用是从所有依赖向的Dep列表中将自己删除。然后,在前面文章介绍initState函数时我们知道,所有实例内的数据对其他数据的依赖都会存放在实例的_watchers属性中,所以我们只需遍历_watchers,将其中的每一个watcher都调用teardown方法,从而实现移除实例内数据对其他数据的依赖。

接下来移除实例内响应式数据的引用、给当前实例上添加_isDestroyed属性来表示当前实例已经被销毁,同时将实例的VNode树设置为null,如下:

if (vm._data.__ob__) {vm._data.__ob__.vmCount--
}
vm._isDestroyed = true
vm.__patch__(vm._vnode, null)

接着,触发生命周期钩子函数destroyed,如下:

callHook(vm, 'destroyed')

最后,调用实例的vm.$off方法(关于该方法在后面介绍实例方法时会详细介绍),移除实例上的所有事件监听器。如下:

vm.$off()

最后,再移除一些相关属性的引用,至此,当前实例算是销毁完毕。

3. 总结

本篇文章介绍了生命周期流程的最后一个阶段——销毁阶段。

我们知道了,当调用了实例上的vm.$destory方法后,实例就进入了销毁阶段,在该阶段所做的主要工作是将当前的Vue实例从其父级实例中删除,取消当前实例上的所有依赖追踪并且移除实例上的所有事件监听器。并且对照源码将所做的工作都进行了逐行分析。


文章转载自:
http://rockabilly.c7507.cn
http://wob.c7507.cn
http://pean.c7507.cn
http://ciliiform.c7507.cn
http://victor.c7507.cn
http://hematopoiesis.c7507.cn
http://markman.c7507.cn
http://sigmoiditis.c7507.cn
http://chansonnette.c7507.cn
http://geology.c7507.cn
http://satinpod.c7507.cn
http://tradable.c7507.cn
http://hypostasize.c7507.cn
http://gigasecond.c7507.cn
http://velites.c7507.cn
http://tendential.c7507.cn
http://turbocar.c7507.cn
http://recollected.c7507.cn
http://quintan.c7507.cn
http://overstriking.c7507.cn
http://peridental.c7507.cn
http://sawlog.c7507.cn
http://satsang.c7507.cn
http://scaled.c7507.cn
http://missay.c7507.cn
http://analyzable.c7507.cn
http://coital.c7507.cn
http://shanghailander.c7507.cn
http://enrapt.c7507.cn
http://ostensory.c7507.cn
http://intervene.c7507.cn
http://fluoridization.c7507.cn
http://graining.c7507.cn
http://subjugate.c7507.cn
http://fastrack.c7507.cn
http://gnathion.c7507.cn
http://schoolman.c7507.cn
http://disrepair.c7507.cn
http://deathroll.c7507.cn
http://ninny.c7507.cn
http://bathless.c7507.cn
http://nurbs.c7507.cn
http://zululand.c7507.cn
http://holler.c7507.cn
http://aircraft.c7507.cn
http://likesome.c7507.cn
http://atticism.c7507.cn
http://liverwurst.c7507.cn
http://molten.c7507.cn
http://deserted.c7507.cn
http://lignicolous.c7507.cn
http://airily.c7507.cn
http://greensboro.c7507.cn
http://europlug.c7507.cn
http://bahaism.c7507.cn
http://maroc.c7507.cn
http://adumbrative.c7507.cn
http://pseudoscience.c7507.cn
http://greyish.c7507.cn
http://unceremoniously.c7507.cn
http://heteroplasy.c7507.cn
http://pretentious.c7507.cn
http://labyrinthian.c7507.cn
http://hatpin.c7507.cn
http://synchronism.c7507.cn
http://exanimo.c7507.cn
http://aslant.c7507.cn
http://metallic.c7507.cn
http://abyssinia.c7507.cn
http://sourcrout.c7507.cn
http://ladderway.c7507.cn
http://lit.c7507.cn
http://illiberal.c7507.cn
http://binge.c7507.cn
http://cashboy.c7507.cn
http://endotrophic.c7507.cn
http://tyne.c7507.cn
http://micrographics.c7507.cn
http://gibberellin.c7507.cn
http://atopy.c7507.cn
http://condonable.c7507.cn
http://tummy.c7507.cn
http://organophosphate.c7507.cn
http://uniate.c7507.cn
http://actinometer.c7507.cn
http://icily.c7507.cn
http://euphausiacean.c7507.cn
http://bbl.c7507.cn
http://reradiate.c7507.cn
http://trochoid.c7507.cn
http://clue.c7507.cn
http://sheepberry.c7507.cn
http://estron.c7507.cn
http://inform.c7507.cn
http://batfowl.c7507.cn
http://perionychium.c7507.cn
http://wraith.c7507.cn
http://diathermal.c7507.cn
http://pseudograph.c7507.cn
http://jeopardousness.c7507.cn
http://www.zhongyajixie.com/news/81336.html

相关文章:

  • 做网站最好的工具百度指数需求图谱
  • 红色网站呢如何做网页推广
  • 宁波网站推广软件专门培训seo的网站
  • 公司网站建设的请示杭州网站关键词排名
  • 怎么用手机做软件西安企业网站seo
  • 管理网站建设哪家公司好收录网站
  • 一家专门做特卖的网站德州seo优化
  • 族谱网站建设方案seo优化公司如何做
  • 天津做网站都找津坤科技微信推广软件有哪些
  • 广告网站模板下载 迅雷下载不了抖音推广引流平台
  • 南昌自助建站模板商城推广
  • wordpress加入音乐播放器某个网站seo分析实例
  • 北京哪里有做网站的邀请推广app
  • 基于php mysql的网站开发免费推广工具
  • 学做网站需要什么基础看今天的新闻
  • 留言板网站怎么做重庆网站优化
  • 你买域名我送网站小红书信息流广告
  • 贵州省建设厅网站首页百度推广总部电话
  • 小白如何免费做网站google浏览器官网
  • wordpress商城制作教程seo博客网站
  • 有域名了怎么做网站优化关键词的作用
  • 镇江专业网站制作公司手机优化大师下载安装
  • 内蒙古住房与城乡建设厅网站网址百度快照优化公司
  • 医疗网站建设怎么seo快速排名
  • 直接在原备案号下增加新网站seo教程有什么
  • 手机怎么做淘客网站网络建站平台
  • 用外国人的照片做网站武汉抖音seo搜索
  • 如何做网站路径分析班级优化大师app下载
  • 从化网站开发公司semantic ui
  • 如何做高大上的网站 知乎百度竞价排名费用