最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

詳解Vue 的異常處理機制

 更新時間:2020年11月30日 09:35:38   作者:梅旭光  
這篇文章主要介紹了Vue 的異常處理機制,幫助大家更好的理解和學習vue框架,感興趣的朋友可以了解下

最近需要在業(yè)務中加一個全局的 filter,filter 會對輸入進行驗證,用于進行前端監(jiān)控。其中一個要處理的問題,就是驗證失敗后如何發(fā)送異常日志,這個過程中順便了解了一下 vue 的異常處理機制。

errorCaptured、errorHandler

vue 提供了兩個 API 用于異常的捕獲,分別是 errorCaptured errorHandler

  1. errorCaptured

errorCaptured 是組件的一個鉤子函數(shù),用于在組件級別捕獲異常。當這個鉤子函數(shù)返回 false 時,會阻止異常進一步向上冒泡,否則會不斷向父組件傳遞,直到 root 組件。

  1. errorHandler

errorHandler 是一個全局的配置項,用來在全局捕獲異常。例如Vue.config.errorHandler = function (err, vm, info) {}。

error.js

在 vue 源碼中,異常處理的邏輯放在 /src/core/util/error.js 中:

import config from '../config'
import { warn } from './debug'
import { inBrowser } from './env'

export function handleError (err: Error, vm: any, info: string) {
 if (vm) {
  let cur = vm
  while ((cur = cur.$parent)) {
   const hooks = cur.$options.errorCaptured
   if (hooks) {
    for (let i = 0; i < hooks.length; i++) {
     try {
      const capture = hooks[i].call(cur, err, vm, info) === false
      if (capture) return
     } catch (e) {
      globalHandleError(e, cur, 'errorCaptured hook')
     }
    }
   }
  }
 }
 globalHandleError(err, vm, info)
}

function globalHandleError (err, vm, info) {
 if (config.errorHandler) {
  try {
   return config.errorHandler.call(null, err, vm, info)
  } catch (e) {
   logError(e, null, 'config.errorHandler')
  }
 }
 logError(err, vm, info)
}

function logError (err, vm, info) {
 if (process.env.NODE_ENV !== 'production') {
  warn(`Error in ${info}: "${err.toString()}"`, vm)
 }
 /* istanbul ignore else */
 if (inBrowser && typeof console !== 'undefined') {
  console.error(err)
 } else {
  throw err
 }
}

文件不長,向外暴露了一個 handleError 方法,在需要捕獲異常的地方調(diào)用。handleError 方法中首先獲取到報錯的組件,之后遞歸查找當前組件的父組件,依次調(diào)用 errorCaptured 方法。在遍歷調(diào)用完所有 errorCaptured 方法、或 errorCaptured 方法有報錯時,會調(diào)用 globalHandleError 方法。

globalHandleError 方法調(diào)用了全局的 errorHandler 方法。

如果 errorHandler 方法自己又報錯了呢?生產(chǎn)環(huán)境下會使用 console.error 在控制臺中輸出。

可以看到 errorCaptured 和 errorHandler 的觸發(fā)時機都是相同的,不同的是 errorCaptured 發(fā)生在前,且如果某個組件的 errorCaptured 方法返回了 false,那么這個異常信息不會再向上冒泡也不會再調(diào)用 errorHandler 方法。

以上就是詳解Vue 的異常處理機制的詳細內(nèi)容,更多關(guān)于vue 異常處理的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • vue配置啟動項目自動打開瀏覽器方式

    vue配置啟動項目自動打開瀏覽器方式

    這篇文章主要介紹了vue配置啟動項目自動打開瀏覽器方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-04-04
  • vue全局方法plugins/utils的實現(xiàn)示例

    vue全局方法plugins/utils的實現(xiàn)示例

    很多時候我們會在全局調(diào)用一些方法,本文主要介紹了vue全局方法plugins/utils的實現(xiàn)示例,具有一定的參考價值,感興趣的可以了解一下
    2024-07-07
  • vue實現(xiàn)登錄頁背景粒子特效

    vue實現(xiàn)登錄頁背景粒子特效

    這篇文章主要為大家詳細介紹了vue實現(xiàn)登錄頁背景粒子特效,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-04-04
  • 詳解vue 組件注冊

    詳解vue 組件注冊

    這篇文章主要介紹了vue 組件注冊的相關(guān)資料,幫助大家更好的理解和學習vue 組件的相關(guān)知識,感興趣的朋友可以了解下
    2020-11-11
  • vue如何實現(xiàn)動態(tài)的選中狀態(tài)切換效果

    vue如何實現(xiàn)動態(tài)的選中狀態(tài)切換效果

    這篇文章主要介紹了vue如何實現(xiàn)動態(tài)的選中狀態(tài)切換效果,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-04-04
  • vue組件中重新渲染的3種方式小結(jié)

    vue組件中重新渲染的3種方式小結(jié)

    本文主要介紹了vue組件中重新渲染的3種方式小結(jié),主要包括改變key,v-if,vm.$forceUpdate()這三種,具有一定的參考價值,感興趣的可以了解一下
    2023-10-10
  • vue-cli-service和webpack-dev-server的區(qū)別及說明

    vue-cli-service和webpack-dev-server的區(qū)別及說明

    這篇文章主要介紹了vue-cli-service和webpack-dev-server的區(qū)別及說明,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-10-10
  • Vue.js 中取得后臺原生HTML字符串 原樣顯示問題的解決方法

    Vue.js 中取得后臺原生HTML字符串 原樣顯示問題的解決方法

    這篇文章主要介紹了VUE.js 中取得后臺原生HTML字符串 原樣顯示問題 ,本文給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2018-06-06
  • VUE3函數(shù)的聲明和使用舉例

    VUE3函數(shù)的聲明和使用舉例

    這篇文章主要給大家介紹了關(guān)于VUE3函數(shù)的聲明和使用的相關(guān)資料, Vue3是一種流行的JavaScript框架,它允許開發(fā)人員構(gòu)建現(xiàn)代化的Web應用程序,需要的朋友可以參考下
    2023-07-07
  • Vue項目保存代碼之后頁面自動更新問題

    Vue項目保存代碼之后頁面自動更新問題

    這篇文章主要介紹了Vue項目保存代碼之后頁面自動更新問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-10-10

最新評論

屏边| 英德市| 松江区| 茂名市| 龙州县| 赤壁市| 新野县| 南召县| 嘉兴市| 富锦市| 阿尔山市| 陈巴尔虎旗| 济源市| 昂仁县| 南川市| 德安县| 江阴市| 赤水市| 武穴市| 抚顺市| 岗巴县| 嵊州市| 华阴市| 蓬安县| 顺义区| 怀集县| 临夏县| 图木舒克市| 江安县| 商都县| 镇康县| 托克托县| 开封县| 双江| 沛县| 新化县| 永宁县| 阿城市| 余姚市| 澄江县| 疏勒县|