vue.js错误捕获是分层机制:errorcaptured拦截后代组件同步错误并可阻断冒泡;vue.config.errorhandler作为应用级兜底,覆盖渲染、watcher、生命周期等未捕获错误;异步操作需手动try/catch或.catch();原生错误由window.onerror和unhandledrejection补位。

Vue.js 渲染流程中的错误捕获不是靠单个钩子兜底,而是按执行阶段和作用域分层拦截:组件级错误优先由 errorCaptured 捕获,未被拦截的会冒泡到全局 Vue.config.errorHandler;异步操作、资源加载、原生 JS 错误则需额外手动加固。
errorCaptured:专用于拦截后代组件错误
它只在父组件中定义时,才能捕获子组件(含深层嵌套)抛出的同步错误,无法捕获自身、同级或兄弟组件的异常。触发时机是错误发生后、尚未冒泡至根组件前。
- 接收三个参数:
err(Error 实例)、vm(出错的子组件实例)、info(如 "render function" 或 "v-on handler") - 返回
false可中断冒泡,适合做局部降级——比如隐藏崩溃区域、显示“内容加载失败”提示 - 若
errorCaptured内部再抛错,会交由Vue.config.errorHandler处理
Vue.config.errorHandler:应用级兜底处理器
这是 Vue 提供的最外层错误拦截点,覆盖组件渲染、watcher 执行、生命周期钩子、自定义事件及 v-on 监听器中未被捕获的错误(Vue 2.6+ 起生效)。
- 必须在应用初始化阶段(如
main.js)配置,否则无效 - 开发环境建议保留完整堆栈输出;生产环境应脱敏(过滤 URL 参数、用户 token 等),再上报监控系统
- 不处理编译期模板错误(如
{{ undefined.prop }})和原生 JS 错误(如setTimeout中抛错)
异步操作必须显式处理
Promise、fetch、axios 等异步逻辑不会自动进入 Vue 错误流,必须主动加防护。
- Promise 链末尾必须接
.catch(),避免触发unhandledrejection -
async/await必须用try/catch包裹,尤其注意await后的 reject 会直接抛出 - 图片、脚本等资源加载失败,用
@error或原生onerror监听,例如:<img src="logo.png">
补位原生错误边界
Vue 不接管所有运行时错误,需借助浏览器原生能力覆盖盲区。
-
window.onerror:捕获全局同步错误、宏任务异常(如setTimeout、setInterval抛错) -
window.addEventListener('unhandledrejection'):专门捕获未catch的 Promise 拒绝,与errorHandler互补 - Vue Router 提供
router.onError(),用于捕获路由解析、懒加载组件失败等导航异常
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











