vue实现答题测评
Vue 实现答题测评的基本步骤
创建Vue项目
使用Vue CLI或Vite初始化项目,安装Vue 3及相关依赖(如vue-router、pinia等)。
设计数据结构
定义题目、选项、用户答案等核心数据,通常以数组或对象形式存储。
questions: [
{
id: 1,
text: "问题内容",
options: ["选项A", "选项B"],
correctAnswer: 0 // 正确答案索引
}
]
构建组件结构
- 题目展示组件:动态渲染题目和选项,绑定用户选择。
- 进度控制组件:显示当前题号/总题数,提供“上一题”“下一题”按钮。
- 结果统计组件:计算得分并展示反馈。
状态管理
使用Vue的响应式数据(如ref/reactive)或Pinia管理答题状态(如当前题号、用户答案)。

逻辑实现
- 选项选择时更新用户答案数组。
- 切换题目时校验边界(如第一题禁用“上一题”)。
- 提交时遍历对比用户答案与正确答案,计算得分。
const calculateScore = () => {
return userAnswers.reduce((score, answer, index) => {
return answer === questions[index].correctAnswer ? score + 1 : score;
}, 0);
};
关键功能扩展
计时功能
使用setInterval实现倒计时,通过Vue生命周期钩子清除定时器。
const timer = ref(60);
const interval = setInterval(() => {
timer.value--;
if (timer.value <= 0) submitAnswers();
}, 1000);
onUnmounted(() => clearInterval(interval));
本地存储
通过localStorage保存未完成的答题进度,恢复时读取数据。

动画效果
使用Vue过渡或CSS动画增强交互,如题目切换淡入淡出。
示例代码片段
题目组件模板
<template>
<div v-for="(option, idx) in currentQuestion.options" :key="idx">
<input
type="radio"
:id="`option-${idx}`"
:value="idx"
v-model="selectedAnswer"
>
<label :for="`option-${idx}`">{{ option }}</label>
</div>
</template>
路由配置(多页测评)
const routes = [
{ path: '/quiz', component: QuizPage },
{ path: '/result', component: ResultPage }
];
注意事项
- 移动端适配:使用响应式布局或UI库(如Vant)。
- 可访问性:为表单元素添加ARIA标签。
- 数据安全:避免前端存储敏感题目答案,关键逻辑应通过后端验证。






