vue v html bug,Vue.js中的5种错误处理方法

Vue是一套用于构建用户界面的渐进式JavaScript框架。在我们使用vue时通常会遇到各种错误,本文就来为大家介绍vue中5种错误处理的方法。

f246dfcb1e1845474e322e48bf4f509f.png

几种错误:

为了测试各种错误处理技术,下面介绍三种不同的错误类型(最初无论如何)。

1、引用一个不存在的变量:

Hello, {{name}}

此示例不会向用户显示错误,但[Vue warn]控制台中将显示一条消息。

757771a7da1cb0f59dce299dfee89bbf.png

可以在此处查看此示例:

2、将变量绑定到一个被计算出来的属性,运行时此变量将抛出错误。

Hello, {{name2}}

const app = new Vue({

el:'#app',

computed:{

name2() {

return x;

}

}

})

这会在控制台中抛出[Vue warn]和常规错误,并且不会向用户显示任何内容。

c403bdfa15107a06edafed977edc9171.png

实例代码如下:

3、执行一个会抛出异常的方法

Do It

const app = new Vue({

el:'#app',

methods:{

doIt() {

return x;

}

}

})

这个错误将在控制台中抛出两次,一个警告和一个常规的错误。与上次不同,只有在实际单击按钮时才会引发错误。

96a5e3f038563139839644a107caa970.png

实例代码:

注:上面3个例子并不代表所有类型的错误。这3种是比较常见的错误。

Vue中异常处理包含以下几个方面的技巧:errorHandler

warnHandler

renderError

errorCaptured

window.onerror(不是Vue特定的技术)

vue异常处理方法介绍:

这是Vue.js应用程序的通用错误处理程序。Vue.config.errorHandler = function(err, vm, info) {

}

err是实际的错误对象,info是Vue特定的错误字符串,vm是实际的Vue应用程序。

此错误处理程序将适用于所有这些错误处理程序。

示例:Vue.config.errorHandler = function(err, vm, info) {

console.log(`Error: ${err.toString()}\nInfo: ${info}`);

}

第一种错误不会触发errorHandler,它只是一个warning。

第二种错误会抛出错误被errorHandler捕获:Error: ReferenceError: x is not defined

Info: render

最后,第三个错误给出以下结果:Error: ReferenceError: x is not defined

Info: v-on handler

warnHandler处理Vue warnings。但请注意,在生产过程中会忽略此处理程序。方法处理程序也略有不同:Vue.config.warnHandler = function(msg, vm, trace) {

}

trace代表了组件树。

示例:Vue.config.warnHandler = function(msg, vm, trace) {

console.log(`Warn: ${msg}\nTrace: ${trace}`);

}

第一个错误被warnHandler捕获:Warn: Property or method 'name' is not defined on the instance but referenced during render.

Make sure that this property is reactive, either in the data option,

or for class-based components, by initializing the property.

See: https://vuejs.org/v2/guide/reactivity.html#Declaring-Reactive-Properties.

Trace:

(found in )

第二和第三示例保持不变。您可以在下面查看三个实例:

和前面两个不同,这个技巧不适用于全局,和组件相关。并且只适用于非生产环境。

下面是一个简单的例子:const app = new Vue({

el:'#app',

renderError (h, err) {

return h('pre', { style: { color: 'red' }}, err.stack)

}

})

若第一个错误使用了这种方法是没有效果的,因为第一个错误是警告,而不是错误。如果在计算属性引发错误的第二个示例中对其进行测试,则会呈现该错误。

示例:

文档中对此方法的介绍:当捕获到任何后代组件的错误时调用。 该挂钩接收三个参数:错误,触发错误的组件实例以及包含有关捕获错误的位置信息的字符串。 挂钩可以返回false,以阻止错误进一步传播。

基于我的一些分析,这个error Handler只能在父组件中处理子组件的错误。据我所知,我们没法直接在Vue的主实例(main instance)中使用它。

为了对此进行测试,我创建了一组父/子组件,如下所示:Vue.component('cat', {

template:`

Cat:

`,

props:{

name:{

required:true,

type:String

}

},

errorCaptured(err,vm,info) {

console.log(`cat EC: ${err.toString()}\ninfo: ${info}`);

return false;

}

});

Vue.component('kitten', {

template:'

Kitten: {{ dontexist() }}

',

props:{

name:{

required:true,

type:String

}

}

});

请注意该kitten组件中有一个错误。现在,如果我尝试像这样使用它:

捕获的信息如下:cat EC: TypeError: dontexist is not a function

info: render

可以在下面的示例中查看:

它是一个全局的异常处理函数,可以抓取所有的JavaScript异常。

处理程序采用以下形式:window.onerror = function(message, source, line, column, error) {

}

source:当前脚本的url。

如果你定义了onerror,但是没有启用Vue.config.errorHandler,那么有很多异常都抓不到。Vue希望你要定义它,否则异常不会抛出去的。

如果定义errorHandler的代码有BUG,那么运行起来也不会被onerror抓到。下面的例子中,如果将oopsIDidItAgain()解注释,你就会发现这个问题。只有第二个按钮没有和Vue绑定,所以报错无论如何都会被抓到。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值