欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

如何手動(dòng)銷毀Vue中掛載的組件

 更新時(shí)間:2022年08月09日 10:39:43   作者:云中客youroch  
這篇文章主要介紹了如何手動(dòng)銷毀Vue中掛載的組件,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

手動(dòng)銷毀Vue掛載的組件

因?yàn)楹芏囗撁嫘枰玫?lt;keep-alive>,我就用其將承載頁面的父組件包裹了,但這也帶來了一些問題。比如新寫的頁面中,進(jìn)入下個(gè)頁面還在調(diào)用上個(gè)頁面的數(shù)據(jù)(以前沒有遇到過,不清楚是是什么原因),即已經(jīng)切換路由卻無法自己destory掉,打日志發(fā)現(xiàn)確實(shí)沒有跑destoryed這個(gè)生命周期函數(shù)。

如何解決

在需要?jiǎng)h除的組件中的deactivated生命周期函數(shù)中手動(dòng)調(diào)用this.$destroy('componentName'),這里的componentName即這個(gè)組件的name,使用后發(fā)現(xiàn)destoryed函數(shù)確實(shí)可以正常使用了,而且進(jìn)入下一個(gè)頁面也不會(huì)再報(bào)錯(cuò)說缺少這個(gè)頁面的數(shù)據(jù)。

vue 銷毀實(shí)例

1.導(dǎo)入vue創(chuàng)建一個(gè)VM實(shí)例

傳入配置對(duì)象,了解配置對(duì)象中的各個(gè)屬性

var VM = new Vue({ el: '#app', // 表示當(dāng)我們new的這個(gè)Vue實(shí)例, 要控制頁面上的那個(gè)區(qū)域?
data: { // data屬性中,存放的是el中要用到的數(shù)據(jù),這里的data就是MVVM中的M專門用來保存每個(gè)頁面的數(shù)據(jù) message: 'Hello Vue!' },?
methods : {}, // 這個(gè)methods屬性中定義了當(dāng)前Vue實(shí)例所有可用的方法,主要寫業(yè)務(wù)邏輯?
computed: {}, // 在computed中,可以定一些屬性, 這些屬性叫做計(jì)算屬性,計(jì)算屬性的本質(zhì)就是一個(gè)方法,只不過我們?cè)谑褂眠@些計(jì)算屬性的時(shí)候是吧它們的名稱直接當(dāng)做屬性來使用的,并不會(huì)把計(jì)算屬性當(dāng)做方法去調(diào)用?
filters : {}, // 這個(gè)filters屬性中定義了當(dāng)前Vue實(shí)例中所有可用的過濾的方法?
watch: {}, // 使用這個(gè)屬性,可以監(jiān)聽data中數(shù)據(jù)的變化,然后觸發(fā)這個(gè)watch中對(duì)應(yīng)的function處理函數(shù) router, // 掛載路由對(duì)象?
directives:{}, // 這個(gè)directives屬性定義了當(dāng)前Vue實(shí)例中所有可用的自定義指令 beforeCreate () {}, // 生命周期函數(shù): 表示實(shí)例完全被創(chuàng)建之前,會(huì)執(zhí)行這個(gè)函數(shù)?
created () {}, // 生命周期函數(shù): 表示實(shí)例被創(chuàng)建之后?
beforeMounted () {}, // 生命周期函數(shù): 表示模板已經(jīng)編譯完成,但是還沒有把模板渲染到頁面中?
mounted () {}, // 生命周期函數(shù):表示模板已經(jīng)編譯完成,內(nèi)存中的模板已經(jīng)真實(shí)的渲染到了頁面中去,已經(jīng)可以看到渲染好的頁面了?
beforeUpdate () {}, // 生命周期函數(shù): 表示當(dāng)前界面還沒有被更新,數(shù)據(jù)肯定被更新了?
update () {}, // 生命周期函數(shù): 表示當(dāng)前頁面和數(shù)據(jù)保持同步了,都是最新的?
beforeDestroy () {}, // 生命周期函數(shù): 表示Vue實(shí)例已經(jīng)從運(yùn)行階段進(jìn)入到銷毀階段?
destroyed () {} // 生命周期函數(shù): 表示組件已經(jīng)完全被銷毀了})

2.vm.$destroy()只能銷毀實(shí)例里的方法但不能清除DOM和data嗎?

destroy()只是完全銷毀一個(gè)實(shí)例,清理它與其它實(shí)例的連接,解綁它的全部指令及事件監(jiān)聽器。

參見官方文檔: https://cn.vuejs.org/v2/api/#vm-destroy

它并不是用來清除已有頁面上的DOM的。實(shí)現(xiàn)功能包括:

(1) 包括Watcher對(duì)象從其所在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) 移除所有事件的監(jiān)聽

vm.$off()

(3) patch一個(gè)null目的是觸發(fā)所有的destroy鉤子。

vm.__patch__(vm._vnode, null)
return function patch (oldVnode, vnode, hydrating, removeOnly, parentElm, refElm) {
? ? /*vnode不存在則直接調(diào)用銷毀鉤子*/
? ? if (isUndef(vnode)) {
? ? ? if (isDef(oldVnode)) invokeDestroyHook(oldVnode)
? ? ? return
? ? }
? ? ...
?}

想要清除頁面的 DOM,需要使用 v-if,或者修改 v-for 中涉及到的數(shù)組或?qū)ο蟆?/p>

另外,調(diào)用 app.$destroy() 之后,你會(huì)發(fā)現(xiàn),app.message = ‘Yes, he is a boy.’ 不會(huì)對(duì)頁面產(chǎn)生影響。 

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。 

相關(guān)文章

  • Vue實(shí)現(xiàn)簡易跑馬燈效果

    Vue實(shí)現(xiàn)簡易跑馬燈效果

    這篇文章主要為大家詳細(xì)介紹了Vue實(shí)現(xiàn)簡易跑馬燈效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • vue 項(xiàng)目 iOS WKWebView 加載

    vue 項(xiàng)目 iOS WKWebView 加載

    這篇文章主要介紹了vue 項(xiàng)目 iOS WKWebView 加載問題,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-04-04
  • Vue路由組件的緩存keep-alive和include屬性的具體使用

    Vue路由組件的緩存keep-alive和include屬性的具體使用

    :瀏覽器頁面在進(jìn)行切換時(shí),原有的路由組件會(huì)被銷毀,通過緩存可以保存被切換的路由組件,本文主要介紹了Vue路由組件的緩存keep-alive和include屬性的具體使用,感興趣的可以了解一下
    2023-11-11
  • Vue路由監(jiān)聽實(shí)現(xiàn)同頁面動(dòng)態(tài)加載的示例

    Vue路由監(jiān)聽實(shí)現(xiàn)同頁面動(dòng)態(tài)加載的示例

    本文主要介紹了Vue基于路由監(jiān)聽實(shí)現(xiàn)同頁面動(dòng)態(tài)加載的示例,重點(diǎn)在于切換路由的時(shí)候,重新拉取列表數(shù)據(jù),接下來看看實(shí)現(xiàn)方法吧
    2021-05-05
  • 淺談vue+webpack項(xiàng)目調(diào)試方法步驟

    淺談vue+webpack項(xiàng)目調(diào)試方法步驟

    本篇文章主要介紹了淺談vue+webpack項(xiàng)目調(diào)試方法步驟,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-09-09
  • vue左右側(cè)聯(lián)動(dòng)滾動(dòng)的實(shí)現(xiàn)代碼

    vue左右側(cè)聯(lián)動(dòng)滾動(dòng)的實(shí)現(xiàn)代碼

    這篇文章主要介紹了vue左右側(cè)聯(lián)動(dòng)滾動(dòng)的實(shí)現(xiàn)代碼,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-06-06
  • 詳解Vue的組件注冊(cè)

    詳解Vue的組件注冊(cè)

    組件是Vue.js最強(qiáng)大的功能之一。組件可以擴(kuò)展HTML元素,封裝可重用的代碼。在較高層面上,組件是自定義元素,Vue.js 的編譯器為它添加特殊功能,需要的朋友可以參考下
    2023-05-05
  • vue實(shí)現(xiàn)導(dǎo)航欄效果(選中狀態(tài)刷新不消失)

    vue實(shí)現(xiàn)導(dǎo)航欄效果(選中狀態(tài)刷新不消失)

    這篇文章主要為大家詳細(xì)介紹了vue實(shí)現(xiàn)導(dǎo)航欄效果,選中狀態(tài)刷新不消失,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-12-12
  • vant自定義二級(jí)菜單操作

    vant自定義二級(jí)菜單操作

    這篇文章主要介紹了vant自定義二級(jí)菜單操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-11-11
  • 解決element-ui table設(shè)置列fixed時(shí)X軸滾動(dòng)條無法拖動(dòng)問題

    解決element-ui table設(shè)置列fixed時(shí)X軸滾動(dòng)條無法拖動(dòng)問題

    這篇文章主要介紹了解決element-ui table設(shè)置列fixed時(shí)X軸滾動(dòng)條無法拖動(dòng)問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-10-10

最新評(píng)論