手机版

简单学习5种处理Vue.js异常的方法

时间:2021-08-22 来源:互联网 编辑:宝哥软件园 浏览:

错误大全

为了测试各种异常处理技巧,我故意触发了三种类型的错误。

类型一:引用一个不存在的变量:

div id=' app ' v-斗篷hello,{{name}}/div上面的代码运行后不会抛出错误,但控制台上会出现[Vue warn]消息。

您可以在Codepen中查看该示例的完整代码。

其次,将变量绑定到计算属性,并在计算时引发异常。

div id=' app ' v-OutLook HellO,{ { name 2 } }/div script const app=new Vue({ El : ' # app ',computed : { name 2(){ return x;} } } })/运行上述代码的脚本会在控制台抛出一个[Vue warn]和一个常规错误,网页为空。

您可以在Codepen中查看该示例的完整代码。

第三:执行引发异常的方法

div id=' app ' v-斗篷按钮@ click=' DoIt ' do It/button/divscriptconst app=new Vue({ El : ' # app ',methods : { DoIt(){ return x;}}})/script此错误也在控制台[Vue warn]和例程中报告。与前一个错误的区别在于,只有当您单击按钮时,才会触发函数调用并报告错误。

您可以在Codepen中查看该示例的完整代码。

在继续之前,我想声明以上三个例子并不代表所有类型的错误。这三种错误是常见的。

好吧,我们应该如何处理异常?我很惊讶Vue的文档中没有关于异常处理的章节。

是的,文件中有一条,但介绍极其简短。

如果在组件呈现期间出现运行错误,该错误将被传递给全局Vue.config.errorHandler配置函数(如果设置)。最好使用这个钩子函数来配合错误跟踪服务。例如,Sentry为Vue提供了官方集成。

P.S .的国内BUG监控服务Fundebug也为Vue提供官方集成。我个人建议官方详细介绍一下。一般来说,Vue中的异常处理包括以下技巧:

错误处理程序警告处理程序呈现错误错误捕获窗口。出错时(不仅仅是Vue)技巧1:错误处理程序

我们应该学习的第一个技能是errorHandler。您可能知道,这是Vue中使用最广泛的异常处理方法。

Vue . config . error handler=function(err,vm,info) {} err指的是错误对象,info是Vue的唯一字符串,VM指的是Vue应用程序本身。请记住,一个页面上可以有多个Vue应用程序。这个错误处理程序作用于所有应用程序。

vue . config . error handler=function(err,vm,info){ console . log(` error : $ { err . tostring()} \ ninfo : $ { info } `);}第一个错误不会触发errorHandler,它只是一个警告。

第二种类型的错误抛出一个由errorHandler捕获的错误:

错误:引用错误:x未定义信息:渲染第三个错误也将被捕获:

错误:引用错误:x未定义信息:v-on处理程序对于记住信息中的信息也非常有用。

提示2:警告处理程序

WarnHandler用于捕获Vue警告。请记住,它在生产环境中不起作用。

vue . config . warn handler=function(msg,vm,trace) {} msg和VM很容易理解,trace代表组件树。请参见以下示例:

vue . config . warn handler=function(msg,vm,trace){ console . log(` warn : $ { msg } \ ntrace : $ { trace } `);}第一个错误被warnHandler捕获:

警告:属性或方法“名称”未在实例上定义,但在呈现期间被引用。通过初始化属性,确保该属性在数据选项或基于类的组件中是反应性的。参见: https://vuejs。org/v2/指南/反应性。html #声明-反应-属性。trace:(在root中找到)您可以检查三个示例:的实际操作

第一个:例1

第二个:例2

第三:例3

提示3:渲染错误

与前两种不同,这种技术不适用于全局情况,并且与组件相关。并且只适用于非生产环境。

下面是一个简单的例子:

const app=newvue的第一个示例({el:' # app ',rendererror (h,err) {return h ('pre ',{style: {color3360' red'}),err。stack)})没有效果,因为它只是一个警告。第二个示例将在网页上显示特定的错误消息:示例代码

说实话,我觉得这并不比直接看控制台好多少。但是,如果您的质量保证团队或测试人员不熟悉浏览器控制台,这是非常有用的。

技能4:错误捕获

ErrorCaptured是与Vue相关的最后一个技术,这让我很困惑,但我还是不明白。文件是这样的:

当捕获到来自后代组件的错误时调用。这个钩子接收三个参数:错误对象、发生错误的组件实例和包含错误源信息的字符串。该钩子可以返回false,以防止错误继续向上传播。

根据我的分析,这个错误处理程序只能处理父组件中子组件的错误。据我所知,我们不能在Vue的主实例中直接使用它。

为了测试,我构建了以下示例:

Vue.component('cat ',{ template : ` div h1 cat :/h1 slot/div `, prop : { name : { required d : true,type:String}},errorCaptured(err,vm,info){ console . log(` cat EC : $ { err . tostring()} \ ninfo : $ { info } `);返回false}});Vue.component('kitten ',{ template : ' div h1 kitten : { { dontexist()} }/h1/div ',prop : { name : { required d : true,type : string } } });注意kitten组件代码中的BUG。

div ID=' app ' v-斗篷猫名称='我的猫'小猫/小猫/猫/div捕获的信息如下:

卡特彼勒EC :类型错误:不存在不是函数信息:渲染以下是正在运行的实例。

ErrorCaptured是一个非常有趣的特性,构建组件库的开发人员应该使用它。这个特性更像是面向组件的开发人员,而不是一般的开发人员。

终极技能: window.onerror

最后一个也是最重要的候选是window.onerror,它是一个全局异常处理函数,可以抓取所有的JavaScript异常。

窗户。onerror=function (message,source,line,column,error) {}我认为function的参数中只有source从字面上很难理解,它代表的是当前的URL。

然后事情会更有趣。如果定义了onerror但没有启用Vue.config.errorHandler,那么有很多异常是无法捕获的。Vue希望您定义它,否则不会抛出异常。这有意义吗?我不太明白。我觉得没必要,甚至有点奇怪。

如果在定义errorHandler的代码中有BUG,那么它在运行时不会被onerror捕获。在下面的例子中,如果您注释OOP sididityrepeat(),您会发现这个问题。只有第二个按钮没有绑定到Vue,所以无论如何都会捕捉到错误。运行实例

摘要

如开头所说,这是我第一次写这方面的文章。也希望得到大家的反馈,包括意见、建议和修改。希望大家分享一下具体的使用方法的例子。

以上就是本文的全部内容。希望对大家的学习有帮助,支持我们。

版权声明:简单学习5种处理Vue.js异常的方法是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。