uni-app vue3+setup 在App.vue添加onError监听,vue页面报错不触发onError

发布于 1周前 作者 wuwangju 来自 Uni-App

uni-app vue3+setup 在App.vue添加onError监听,vue页面报错不触发onError

类别 信息
产品分类 uniapp/App
PC开发环境 Windows
PC开发环境版本号 12
HBuilderX类型 正式
HBuilderX版本号 4.06
手机系统 Android
手机系统版本号 Android 12
手机厂商 华为
手机机型 NOP-AN00
页面类型 vue
vue版本 vue3
打包方式 离线
项目创建方式 HBuilderX

示例代码:

<script setup lang="ts">
onError((err) => {
console.log("onError", err);
});
</script>

操作步骤:

  • 新建vue3+setup项目,创建App.vue文件

预期结果:

  • 报错可以正常触发onError函数

实际结果:

  • 报错不能正常触发onError函数

bug描述:

  • vue3+setup 在App.vue添加onError监听,vue页面报错不触发onError

2 回复

vue3的options模式也不行啊,急


uni-app 中使用 Vue 3setup 语法时,如果你想在 App.vue 中添加全局的错误监听器(onError),通常情况下,onError 不会捕获组件内部的错误,除非你显式地在组件内部抛出错误。

如果你想捕获页面或组件中的错误,可以考虑以下几种方法:

1. 使用 errorCaptured 钩子

errorCaptured 是 Vue 提供的一个生命周期钩子,可以在父组件中捕获子组件的错误。你可以在 App.vue 中使用它来捕获全局的错误。

<script setup>
import { onErrorCaptured } from 'vue';

onErrorCaptured((err, instance, info) => {
  console.error('Error captured:', err, instance, info);
  // 你可以在这里处理错误,比如发送到服务器
  return false; // 阻止错误继续向上传播
});
</script>

<template>
  <router-view />
</template>

2. 使用 window.onerror

如果你想要捕获全局的 JavaScript 错误,可以使用 window.onerror

<script setup>
import { onMounted } from 'vue';

onMounted(() => {
  window.onerror = function(message, source, lineno, colno, error) {
    console.error('Global error:', message, source, lineno, colno, error);
    // 你可以在这里处理错误,比如发送到服务器
    return true; // 阻止默认的错误处理
  };
});
</script>

<template>
  <router-view />
</template>

3. 使用 Vue.config.errorHandler

你也可以使用 Vue.config.errorHandler 来捕获全局的 Vue 错误。

<script setup>
import { createApp } from 'vue';

const app = createApp({});

app.config.errorHandler = (err, vm, info) => {
  console.error('Vue error:', err, vm, info);
  // 你可以在这里处理错误,比如发送到服务器
};
</script>

<template>
  <router-view />
</template>

4. 使用 try-catch 捕获组件内部错误

在组件内部,你可以使用 try-catch 来捕获特定的错误,并在捕获到错误时手动触发全局错误处理。

<script setup>
import { onMounted } from 'vue';

onMounted(() => {
  try {
    // 你的代码
  } catch (err) {
    console.error('Component error:', err);
    // 你可以在这里处理错误,比如发送到服务器
  }
});
</script>

5. 使用 uni.onError(仅限 uni-app)

uni-app 提供了 uni.onError 方法,可以捕获全局的 JavaScript 错误。

<script setup>
import { onMounted } from 'vue';

onMounted(() => {
  uni.onError(function(error) {
    console.error('Uni-app error:', error);
    // 你可以在这里处理错误,比如发送到服务器
  });
});
</script>

<template>
  <router-view />
</template>
回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!