返回顶部
首页 > 资讯 > 前端开发 > 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://lsjlt.com/news/172177.html(转载时请注明来源链接)

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

猜你喜欢
  • 如何手动销毁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 加载组件
  • 详解Vue全局组件的挂载之实现弹窗组件
    目录vue组件挂载类型组件挂载代码示例1.vue.extend()方法2.render函数挂载vue组件挂载类型 vue中组件的挂载分为两种类型: vue.extend() rend...
    99+
    2022-11-13
    Vue组件挂载 弹窗 Vue组件挂载 Vue弹窗组件 Vue 弹窗
  • jquery中如何加载单文件vue组件
    这篇文章主要介绍了jquery中如何加载单文件vue组件,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。具体内容如下   ...
    99+
    2024-04-02
  • 如何销毁阿里云服务器上的文件夹
    1. 登录阿里云服务器 首先,您需要登录到您的阿里云服务器。您可以使用SSH客户端(如PuTTY)通过IP地址和登录凭据(用户名和密码)远程登录到服务器。 2. 导航到目标文件夹 一旦成功登录到服务器,您需要导航到要销毁的目标文件夹所在的...
    99+
    2023-10-27
    阿里 文件夹 器上
  • Vue 3.0 中如何使用动态组件
    这篇文章给大家介绍Vue 3.0 中如何使用动态组件,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。一、组件注册1.1 全局注册在 Vue 3.0 中,通过使用 app 对象的 comp...
    99+
    2024-04-02
  • 一文聊聊Vue组件生命周期的三个阶段(创建、运行和销毁)
    总结生命周期:1)又称:生命周期回调函数、生命周期函数、生命周期钩子。2)含义:vue在关键时刻帮助我们调用一些特殊名称的函数。3)生命周期函数的名字不可更改,但函数的具体内容是程序员根据需求编写的。4)生命周期函数中的this指向是 vm...
    99+
    2023-05-14
    Vue 组件 生命周期
  • vue如何手动触发事件
    在vue中手动触发事件的方法:1.新建vue.js项目;2.使用@click.native属性绑定事件;3.添加button按钮;4.添加代码设置手动触发;具体步骤如下:首先,在vue-cli中创建一个vue.js项目;vue create...
    99+
    2024-04-02
  • 如何解决Vue中SSR组件加载问题
    这篇文章主要介绍如何解决Vue中SSR组件加载问题,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!Node 端渲染提示 window/document 没有定义业务场景首先来看一个简单...
    99+
    2024-04-02
  • angular9中如何实现组件动态加载
    这篇文章将为大家详细讲解有关angular9中如何实现组件动态加载,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。指令的创建在添加组件之前,先要定义一个锚点来告诉 Angular 要把组件插入到什么地方。 ...
    99+
    2023-06-14
  • vue动态组件如何使用
    这篇文章主要介绍“vue动态组件如何使用”,在日常操作中,相信很多人在vue动态组件如何使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”vue动态组件如何使用”的疑惑有所帮助!接下来,请跟着小编一起来学习吧...
    99+
    2023-06-29
  • vue中如何实现无缝滚动组件vue-seamless-scroll
    小编给大家分享一下vue中如何实现无缝滚动组件vue-seamless-scroll,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧...
    99+
    2024-04-02
  • 如何在Ubuntu中挂载外部驱动器
    在Ubuntu中挂载外部驱动器可以通过以下步骤进行: 首先插入外部驱动器到计算机的USB端口中。 打开终端窗口(Ctrl +...
    99+
    2024-04-02
  • Vue加载中动画组件使用方法详解
    本文实例为大家分享了Vue加载中动画组件的使用,供大家参考,具体内容如下 (模仿ant-design加载中样式)效果图如下: ①创建Loading.vue组件: <templ...
    99+
    2024-04-02
  • Vue中form表单动态如何添加组件
    这篇文章给大家分享的是有关Vue中form表单动态如何添加组件的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。效果如下:这种效果实现其实就是对 v-for 指令的一种使用,组件不是...
    99+
    2024-04-02
  • vue如何开发一个加载Button组件
    本篇内容介绍了“vue如何开发一个加载Button组件”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!组件背景点击按钮时请求一些接口数据,而为...
    99+
    2023-06-30
  • Vue如何实现异步加载about组件
    这篇文章主要介绍“Vue如何实现异步加载about组件”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Vue如何实现异步加载about组件”文章能帮助大家解决问题。异步加载about组件about.j...
    99+
    2023-07-04
  • Vue中组件如何缓存
    这篇文章给大家分享的是有关Vue中组件如何缓存的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。最近项目中需要实现一个保留上一次Tab 页的功能。如下图,当我选择 B 组件时,我希望...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作