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

vue報(bào)錯(cuò)Failed to execute 'appendChild' on 'Node'解決

 更新時(shí)間:2022年11月16日 15:49:47   作者:muio  
這篇文章主要為大家介紹了vue報(bào)錯(cuò)Failed to execute 'appendChild' on 'Node'解決方法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

一、問(wèn)題描述

某天在開(kāi)發(fā)需求時(shí)發(fā)現(xiàn),業(yè)務(wù)頁(yè)面上報(bào)告了一個(gè)Script error。

由于vconsole看不到詳細(xì)報(bào)錯(cuò)信息,于是在chrome上打開(kāi),具體報(bào)錯(cuò)信息如下:

Uncaught DOMException: Failed to execute 'appendChild' on 'Node': This node type does not support this method. at Object.appendChild 

看起來(lái)是vue2.6.12包里報(bào)了一個(gè)錯(cuò)誤,但從報(bào)錯(cuò)提供的信息看不出來(lái)那行代碼引發(fā)的報(bào)錯(cuò)。

二、解決過(guò)程

1、google

解決問(wèn)題的第一步往往是先看看“別人咋解決的”:把錯(cuò)誤信息ctrl+c ctrl+v到瀏覽器里google一下先。

stackoverflow里看到的第一個(gè)解決方案是通過(guò)添加client-only標(biāo)簽:

<template>
  <div id="container">
     <client-only>
        <Components>
     </client-only>
  <div>
</template>

在項(xiàng)目里也照著這個(gè)方法在App.vue里添加client-only標(biāo)簽,重試后發(fā)現(xiàn)沒(méi)有效果,依然報(bào)錯(cuò)。

也有說(shuō)法說(shuō)是由于標(biāo)簽的關(guān)閉寫(xiě)法導(dǎo)致的Hydration errors。

于是我搜索了下項(xiàng)目代碼,發(fā)現(xiàn)確實(shí)有幾處標(biāo)簽是使用類(lèi)似 <span class="split" /> 寫(xiě)法進(jìn)行關(guān)閉的。抱著嘗試的心理,我把這些寫(xiě)法都改成了<span class="split"></span>。

然而重試后依然沒(méi)有解決這個(gè)報(bào)錯(cuò)。

2、斷點(diǎn)調(diào)試

既然網(wǎng)上的方法沒(méi)有效果,那只能打斷點(diǎn)看看是否能找到報(bào)錯(cuò)的具體位置。

從錯(cuò)誤報(bào)告點(diǎn)擊進(jìn)詳情,可以看到是vue.min.js文件的appendChild拋出的錯(cuò)誤。

在這里打一個(gè)斷點(diǎn),并運(yùn)行:

第一次經(jīng)過(guò)此處:e是一個(gè)div,t是一個(gè)#comment的node節(jié)點(diǎn),此時(shí)還沒(méi)有拋出錯(cuò)誤。

第二次經(jīng)過(guò)此處:e是一個(gè)div,t是一個(gè)text元素,此時(shí)還沒(méi)有拋出錯(cuò)誤。

第三次經(jīng)過(guò)此處:e是#comment的node節(jié)點(diǎn),t是一個(gè)按鈕的div元素,此處拋出了對(duì)應(yīng)的錯(cuò)誤。

也就是在第三次運(yùn)行appendChild時(shí),由于e此時(shí)是一個(gè)node節(jié)點(diǎn),不支持appendChild方法,于是vue拋出了Uncaught DOMException: Failed to execute 'appendChild' on 'Node': This node type does not support this method.錯(cuò)誤。

在項(xiàng)目里搜索comment,發(fā)現(xiàn)并沒(méi)有找到相應(yīng)的代碼。于是從第三次appendChild的t參數(shù)入手。

可以看出來(lái)這是一個(gè)按鈕元素,并且按鈕文字內(nèi)容是“我知道了”。在項(xiàng)目里搜索“我知道了”,可以找到兩處符合條件的元素。根據(jù)此時(shí)的頁(yè)面位置可以排除captcha組件,所以鎖定了verifyResult組件里的“我知道了”按鈕。

這處按鈕的html代碼如下:

<q-button
  v-if="resultInfo.showBtn"
  type="primary"
  @click="resultInfo.callback"
>
  {{ resultInfo.btnText }}
</q-button>

先把這部分內(nèi)容直接注釋掉看看。 發(fā)現(xiàn)這個(gè)報(bào)錯(cuò)確實(shí)不見(jiàn)了??梢源_認(rèn),這個(gè)按鈕就是報(bào)錯(cuò)的源頭。

3、定位

那這個(gè)按鈕到底有啥問(wèn)題呢?看起來(lái)就是一個(gè)平平無(wú)奇的確認(rèn)按鈕呀。

從剛剛打斷點(diǎn)的時(shí)候可以看到,此時(shí)按鈕的text正常取到了"我知道了"文案,且報(bào)錯(cuò)信息是在進(jìn)行appendChild,也就是添加元素的動(dòng)作時(shí)。而這個(gè)按鈕里用到了v-if,合理懷疑是這個(gè)v-if引起的。于是嘗試把v-if去掉或改成一個(gè)常量,發(fā)現(xiàn)頁(yè)面也不會(huì)報(bào)錯(cuò)。

所以可以確定,這里的報(bào)錯(cuò)是由于v-if的參數(shù)引起的。

這里v-if的參數(shù)是:resultInfo.showBtn

這里resultInfo是一個(gè)計(jì)算參數(shù):

showBtn是通過(guò)另一個(gè)計(jì)算參數(shù):isMobile來(lái)控制的。

看來(lái)問(wèn)題就在isMobile上。

通過(guò)打印isMobile發(fā)現(xiàn),在node時(shí)由于沒(méi)有window,所以isMobile=false,而頁(yè)面渲染時(shí)isMobile=true。

所以這里isMobile有一個(gè)從false -> true的變化。

所以這里按鈕元素經(jīng)歷了從無(wú)到有的過(guò)程,在appendChild的時(shí)候node節(jié)點(diǎn)就拋出了錯(cuò)誤。

4、解決

這里解決方案的主要就是去掉這個(gè)從無(wú)到有的過(guò)程,或者把這個(gè)變化后移。

  • 去掉這個(gè)從無(wú)到有的過(guò)程:把v-if改成v-show
  • 把這個(gè)變化后移:isMobile不使用計(jì)算參數(shù),在默認(rèn)初始化為false,在created時(shí)再進(jìn)行賦值。
created() {
    this.isMobile = browser.isMobile();
}

兩種方法都可以解決,我這里使用了第一種解決方案,報(bào)錯(cuò)不再出現(xiàn),且頁(yè)面按鈕可以正常顯示~

以上就是vue報(bào)錯(cuò)Failed to execute 'appendChild' on 'Node'解決的詳細(xì)內(nèi)容,更多關(guān)于vue 報(bào)錯(cuò)解決的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • vue項(xiàng)目打包清除console.log的4種方法

    vue項(xiàng)目打包清除console.log的4種方法

    項(xiàng)目打包的時(shí)候想要?jiǎng)h除console.log,本文主要介紹了vue項(xiàng)目打包清除console.log的4種方法,具有一定的參考價(jià)值,感興趣的可以了解游戲
    2023-11-11
  • vue如何通過(guò)日期篩選數(shù)據(jù)

    vue如何通過(guò)日期篩選數(shù)據(jù)

    這篇文章主要介紹了vue如何通過(guò)日期篩選數(shù)據(jù),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-05-05
  • VUE-ElementUI?時(shí)間區(qū)間選擇器的使用

    VUE-ElementUI?時(shí)間區(qū)間選擇器的使用

    這篇文章主要介紹了VUE-ElementUI?時(shí)間區(qū)間選擇器的使用,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-05-05
  • vue項(xiàng)目打包之開(kāi)發(fā)環(huán)境和部署環(huán)境的實(shí)現(xiàn)

    vue項(xiàng)目打包之開(kāi)發(fā)環(huán)境和部署環(huán)境的實(shí)現(xiàn)

    這篇文章主要介紹了vue項(xiàng)目打包之開(kāi)發(fā)環(huán)境和部署環(huán)境的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-04-04
  • 詳解vue頁(yè)面狀態(tài)持久化詳解

    詳解vue頁(yè)面狀態(tài)持久化詳解

    這篇文章主要為大家介紹了vue頁(yè)面狀態(tài)持久化,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2021-12-12
  • 解決vue自定義全局消息框組件問(wèn)題

    解決vue自定義全局消息框組件問(wèn)題

    這篇文章主要介紹了vue自定義全局消息框組件問(wèn)題及解決方法,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-11-11
  • vue2實(shí)現(xiàn)provide inject傳遞響應(yīng)式

    vue2實(shí)現(xiàn)provide inject傳遞響應(yīng)式

    在看element-ui的源碼的時(shí)候,注意到源碼里面有很多地方使用provide和inject的屬性,本文主要介紹了vue2實(shí)現(xiàn)provide inject傳遞響應(yīng)式,分享給大家,感興趣的可以了解一下
    2021-05-05
  • vue+iview如何實(shí)現(xiàn)拼音、首字母、漢字模糊搜索

    vue+iview如何實(shí)現(xiàn)拼音、首字母、漢字模糊搜索

    這篇文章主要介紹了vue+iview如何實(shí)現(xiàn)拼音、首字母、漢字模糊搜索,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-04-04
  • Vue echarts模擬后端數(shù)據(jù)流程詳解

    Vue echarts模擬后端數(shù)據(jù)流程詳解

    在平常的項(xiàng)目中,echarts圖表我們也是使用的非常多的,通常我們從后端拿到數(shù)據(jù),需要在圖表上動(dòng)態(tài)的進(jìn)行呈現(xiàn),接下來(lái)我們就模擬從后端獲取數(shù)據(jù)然后進(jìn)行呈現(xiàn)的方法
    2022-09-09
  • 詳解如何從零開(kāi)始搭建Express+Vue開(kāi)發(fā)環(huán)境

    詳解如何從零開(kāi)始搭建Express+Vue開(kāi)發(fā)環(huán)境

    這篇文章主要介紹了詳解如何從零開(kāi)始搭建Express+Vue開(kāi)發(fā)環(huán)境,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-07-07

最新評(píng)論