广告
返回顶部
首页 > 资讯 > 前端开发 > JavaScript >如何手动销毁Vue中挂载的组件
  • 619
分享到

如何手动销毁Vue中挂载的组件

Vue手动组件Vue销毁挂载的组件Vue 销毁组件 2022-11-13 14:11:50 619人浏览 薄情痞子
摘要

目录手动销毁Vue挂载的组件如何解决vue 销毁实例1.导入vue创建一个VM实例2.vm.$destroy()只能销毁实例里的方法但不能清除DOM和data吗?手动销毁Vue挂载的

手动销毁Vue挂载的组件

因为很多页面需要用到<keep-alive>,我就用其将承载页面的父组件包裹了,但这也带来了一些问题。比如新写的页面中,进入下个页面还在调用上个页面的数据(以前没有遇到过,不清楚是是什么原因),即已经切换路由却无法自己destory掉,打日志发现确实没有跑destoryed这个生命周期函数。

如何解决

在需要删除的组件中的deactivated生命周期函数中手动调用this.$destroy('componentName'),这里的componentName即这个组件的name,使用后发现destoryed函数确实可以正常使用了,而且进入下一个页面也不会再报错说缺少这个页面的数据。

vue 销毁实例

1.导入vue创建一个VM实例

传入配置对象,了解配置对象中的各个属性

var VM = new Vue({ el: '#app', // 表示当我们new的这个Vue实例, 要控制页面上的那个区域 
data: { // data属性中,存放的是el中要用到的数据,这里的data就是MVVM中的M专门用来保存每个页面的数据 message: 'Hello Vue!' }, 
methods : {}, // 这个methods属性中定义了当前Vue实例所有可用的方法,主要写业务逻辑 
computed: {}, // 在computed中,可以定一些属性, 这些属性叫做计算属性,计算属性的本质就是一个方法,只不过我们在使用这些计算属性的时候是吧它们的名称直接当做属性来使用的,并不会把计算属性当做方法去调用 
filters : {}, // 这个filters属性中定义了当前Vue实例中所有可用的过滤的方法 
watch: {}, // 使用这个属性,可以监听data中数据的变化,然后触发这个watch中对应的function处理函数 router, // 挂载路由对象 
directives:{}, // 这个directives属性定义了当前Vue实例中所有可用的自定义指令 beforeCreate () {}, // 生命周期函数: 表示实例完全被创建之前,会执行这个函数 
created () {}, // 生命周期函数: 表示实例被创建之后 
beforeMounted () {}, // 生命周期函数: 表示模板已经编译完成,但是还没有把模板渲染到页面中 
mounted () {}, // 生命周期函数:表示模板已经编译完成,内存中的模板已经真实的渲染到了页面中去,已经可以看到渲染好的页面了 
beforeUpdate () {}, // 生命周期函数: 表示当前界面还没有被更新,数据肯定被更新了 
update () {}, // 生命周期函数: 表示当前页面和数据保持同步了,都是最新的 
beforeDestroy () {}, // 生命周期函数: 表示Vue实例已经从运行阶段进入到销毁阶段 
destroyed () {} // 生命周期函数: 表示组件已经完全被销毁了})

2.vm.$destroy()只能销毁实例里的方法但不能清除DOM和data吗?

destroy()只是完全销毁一个实例,清理它与其它实例的连接,解绑它的全部指令及事件监听器。

参见官方文档: https://cn.vuejs.org/v2/api/#vm-destroy

它并不是用来清除已有页面上的DOM的。实现功能包括:

(1) 包括Watcher对象从其所在Dep中释放

if (vm._watcher) {
  vm._watcher.teardown()
}
let i = vm._watchers.length
while (i--) {
  vm._watchers[i].teardown()
}
// remove reference from data ob
// frozen object may not have observer.
if (vm._data.__ob__) {
  vm._data.__ob__.vmCount--
}

(2) 移除所有事件的监听

vm.$off()

(3) patch一个null目的是触发所有的destroy钩子。

vm.__patch__(vm._vnode, null)
return function patch (oldVnode, vnode, hydrating, removeOnly, parentElm, refElm) {
    
    if (isUndef(vnode)) {
      if (isDef(oldVnode)) invokeDestroyHook(oldVnode)
      return
    }
    ...
 }

想要清除页面的 DOM,需要使用 v-if,或者修改 v-for 中涉及到的数组或对象。

另外,调用 app.$destroy() 之后,你会发现,app.message = ‘Yes, he is a boy.’ 不会对页面产生影响。 

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。 

--结束END--

本文标题: 如何手动销毁Vue中挂载的组件

本文链接: https://www.lsjlt.com/news/172177.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 如何手动销毁Vue中挂载的组件
    目录手动销毁Vue挂载的组件如何解决vue 销毁实例1.导入vue创建一个VM实例2.vm.$destroy()只能销毁实例里的方法但不能清除DOM和data吗?手动销毁Vue挂载的...
    99+
    2022-11-13
    Vue手动组件 Vue销毁挂载的组件 Vue 销毁组件
  • vue如何实现事件的销毁
    这篇文章将为大家详细讲解有关vue如何实现事件的销毁,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。事件的销毁Vue 组件销毁时,会自动解绑它的全部指令及事件监听器,但是仅限于组件本身的事件而对于定时器、a...
    99+
    2023-06-26
  • Vue加载中动画组件如何使用
    这篇文章主要介绍“Vue加载中动画组件如何使用”,在日常操作中,相信很多人在Vue加载中动画组件如何使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Vue加载中动画组件如何使用”的疑惑有所帮助!接下来,请跟...
    99+
    2023-06-29
  • vue如何动态加载组件详解
    目录使用场景:需要动态导入组件的页面核心组件的代码:使用场景:总结使用场景: 项目中需要我们根据不同的业务需求呈现不同的业务场景,如果业务类型简单还好,直接全部引入判断即可,但随着我...
    99+
    2022-11-13
    vue 组件动态加载 vuejs动态加载组件 vue 加载组件
  • jquery中如何加载单文件vue组件
    这篇文章主要介绍了jquery中如何加载单文件vue组件,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。具体内容如下   ...
    99+
    2022-10-19
  • 如何解决Vue中SSR组件加载问题
    这篇文章主要介绍如何解决Vue中SSR组件加载问题,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!Node 端渲染提示 window/document 没有定义业务场景首先来看一个简单...
    99+
    2022-10-19
  • Vue 3.0 中如何使用动态组件
    这篇文章给大家介绍Vue 3.0 中如何使用动态组件,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。一、组件注册1.1 全局注册在 Vue 3.0 中,通过使用 app 对象的 comp...
    99+
    2022-10-19
  • angular9中如何实现组件动态加载
    这篇文章将为大家详细讲解有关angular9中如何实现组件动态加载,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。指令的创建在添加组件之前,先要定义一个锚点来告诉 Angular 要把组件插入到什么地方。 ...
    99+
    2023-06-14
  • vue中如何实现无缝滚动组件vue-seamless-scroll
    小编给大家分享一下vue中如何实现无缝滚动组件vue-seamless-scroll,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧...
    99+
    2022-10-19
  • Vue中如何添加手机验证码组件功能
    这篇文章主要介绍Vue中如何添加手机验证码组件功能,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!什么是组件:组件是Vue.js最强大的功能之一。组件可以扩展HTML元素,封装可重用的...
    99+
    2022-10-19
  • Vue中form表单动态如何添加组件
    这篇文章给大家分享的是有关Vue中form表单动态如何添加组件的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。效果如下:这种效果实现其实就是对 v-for 指令的一种使用,组件不是...
    99+
    2022-10-19
  • 如何使用Vue代码实现一个上下滚动加载组件
    本篇内容主要讲解“如何使用Vue代码实现一个上下滚动加载组件”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何使用Vue代码实现一个上下滚动加载组件”吧!组件代码// scrollLo...
    99+
    2023-07-04
  • vue如何给组件动态绑定不同的事件
    目录vue给组件动态绑定不同的事件场景vue组件绑定事件无效下面提供两者方法,可以任选其一vue给组件动态绑定不同的事件 场景 根据用户配置的事件动态绑定。也就是用户可以动态选择配置...
    99+
    2022-11-13
    vue组件 动态绑定事件 vue动态绑定
  • 如何解析Vue中动态组件怎么使用
    如何解析Vue中动态组件怎么使用,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。动态组件在开发的过程中大多数情况下都会用到,当我们需要在不同的组件之间进行状态切换时,动态组件...
    99+
    2023-06-25
  • Linux中如何查看已挂载的文件系统类型详解
    前言 如你所知,linux 支持非常多的文件系统,例如 ext4、ext3、ext2、sysfs、securityfs、FAT16、FAT32、NTFS 等等,当前被使用最多的文件系统是 ext4。你曾经疑惑过你的 Li...
    99+
    2022-06-04
    linux挂载文件系统 linux 挂载根文件系统 linux挂载nfs文件系统
  • Vue中的非单文件组件如何使用
    本篇内容介绍了“Vue中的非单文件组件如何使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一,什么是组件实现应用中局部功能代和资源的集合(...
    99+
    2023-07-05
  • 如何理解Vue中组件的自定义事件
    本篇文章为大家展示了如何理解Vue中组件的自定义事件,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。<template>  <div > ...
    99+
    2023-06-25
  • vue中手动封装iconfont组件解析(三种引用方式的封装和使用)
    目录准备封装unicode引用封装font-class引用封装symbol引用封装引入全局引入局部引入使用在线使用 有时候会因网络问题影响用户体验;直接放在 本地使用 ,如果过多使用...
    99+
    2022-11-13
  • Vue中如何对ElementUI的Dialog组件封装
    目录对ElementUI的Dialog组件封装.sync 修饰符说明总结对ElementUI的Dialog组件封装 1.子组件的写法 <el-dialog     title=...
    99+
    2023-03-11
    Vue ElementUI Dialog组件封装 Vue ElementUI封装
  • vue如何观察组件中的任何内容
    这篇文章主要为大家展示了“vue如何观察组件中的任何内容”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“vue如何观察组件中的任何内容”这篇文章吧。观察组件中的任何内容你的组件中的任何响应都可以被...
    99+
    2023-06-27
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作