vue全局异常处理,vue事件处理机制

  vue全局异常处理,vue事件处理机制

  本文主要介绍vue的异常处理机制,帮助你更好的理解和学习Vue框架。感兴趣的朋友可以了解一下。

  最近,公司需要增加一个全局过滤器。滤波器将验证输入并用于前端监控。需要处理的一个问题是如何在验证失败后发送异常日志。在这个过程中,我了解到了vue的异常处理机制。

  errorCaptured、errorHandler

  Vue为异常捕获提供了两个API,即errorCaptured和errorHandler:

  错误被捕获

  ErrorCaptured是一个组件的钩子函数,用于在组件级别捕获异常。当这个钩子函数返回false时,它将阻止异常进一步冒泡,否则它将不断传递到父组件,直到根组件。

  错误处理程序

  ErrorHandler是一个全局配置项,用于全局捕捉异常。例如vue . config . error handler=function(err,VM,info) {}。

  error.js

  在vue源代码中,异常处理的逻辑放在/src/core/util/error.js中:

  导入配置自./config

  从导入{ warn }。/debug

  从导入{ inBrowser }。/env

  导出函数handleError (err: Error,vm: any,info: string) {

  如果(虚拟机){

  设cur=vm

  while ((cur=cur。$parent)) {

  常量挂钩=cur。$options.errorCaptured

  如果(挂钩){

  for(设I=0;I挂钩.长度;i ) {

  尝试{

  const capture=hooks[i]。call(cur,err,vm,info)==false

  如果(捕获)返回

  } catch (e) {

  globalHandleError(e,cur, errorCaptured hook )

  }

  }

  }

  }

  }

  globalHandleError(错误,虚拟机,信息)

  }

  函数globalHandleError (err,vm,info) {

  if (config.errorHandler) {

  尝试{

  返回config.errorHandler.call(null,err,vm,info)

  } catch (e) {

  logError(e,null,“config.errorHandler”)

  }

  }

  日志错误(错误,虚拟机,信息)

  }

  函数日志错误(错误,虚拟机,信息){

  if (process.env.NODE_ENV!==生产){

  warn(` $ { info }中的错误: ${err.toString()} `,vm)

  }

  /*伊斯坦布尔忽略else */

  if(在浏览器类型的控制台中!==未定义){

  console.error(错误)

  }否则{

  抛出错误

  }

  }

  这个文件并不长,它向外部公开了一个handleError方法,在需要捕获异常的地方调用这个方法。在handleError方法中,首先获取报告错误的组件,然后递归查找当前组件的父组件,依次调用errorCaptured方法。当遍历中调用所有errorCaptured方法时,或者当errorCaptured方法报告错误时,将调用GlobalHandleError方法。

  GlobalHandleError方法调用全局errorHandler方法。

  如果errorHandler方法本身再次报告错误怎么办?在生产环境中,console.error将用于控制台中的输出。

  可以看出,errorCaptured和errorHandler的触发时机是一样的,不同的是errorCaptured先发生,如果组件的errorCaptured方法返回false,异常信息就不会再冒泡,errorHandler方法也不会再被调用。

  以上是对Vue的异常处理机制的详细说明。关于vue异常处理的更多信息,请关注我们的其他相关文章!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: