面试题答案
一键面试- 处理措施:
- 显示友好的错误提示,告知用户发生了错误。
- 提供重试机制,允许用户尝试重新加载组件。
- 记录错误日志,方便开发者排查问题。
- 代码示例:
首先,定义异步组件:
在上述代码中:<template> <div> <component :is="asyncComponent" @error="handleError"></component> <button v-if="error" @click="retryLoad">重试</button> <p v-if="error">{{ error.message }}</p> </div> </template> <script> export default { data() { return { asyncComponent: null, error: null }; }, created() { this.loadAsyncComponent(); }, methods: { loadAsyncComponent() { this.$options.components.asyncComponent = () => import(/* webpackChunkName: "async-component" */ './AsyncComponent.vue') .then(component => { this.error = null; return component; }) .catch(err => { this.error = err; console.error('组件加载错误:', err); throw err; }); }, handleError(err) { this.error = err; console.error('组件渲染错误:', err); }, retryLoad() { this.error = null; this.loadAsyncComponent(); } } }; </script>
loadAsyncComponent
方法使用import()
进行异步组件加载,捕获加载过程中的错误并记录日志,同时设置error
信息。handleError
方法捕获组件渲染过程中的错误并记录日志。retryLoad
方法用于重试加载异步组件,重置error
信息并重新调用loadAsyncComponent
。- 模板中根据
error
状态显示错误信息和重试按钮。