当前位置:首页 > VUE

vue 实现答题功能

2026-02-18 12:36:05VUE

Vue 实现答题功能的方法

数据结构和状态管理

使用 Vue 的 dataref(Composition API)存储题目列表和用户答案。例如:

data() {
  return {
    questions: [
      { id: 1, text: "问题1", options: ["A", "B", "C"], correct: 0 },
      { id: 2, text: "问题2", options: ["A", "B"], correct: 1 }
    ],
    userAnswers: {}
  }
}

动态渲染题目

通过 v-for 循环渲染题目和选项,使用 v-model 绑定用户选择:

<div v-for="q in questions" :key="q.id">
  <h3>{{ q.text }}</h3>
  <div v-for="(opt, index) in q.options" :key="index">
    <input 
      type="radio" 
      :id="`q${q.id}_opt${index}`" 
      :value="index" 
      v-model="userAnswers[q.id]"
    >
    <label :for="`q${q.id}_opt${index}`">{{ opt }}</label>
  </div>
</div>

提交与验证逻辑

计算得分时遍历用户答案并与正确答案对比:

methods: {
  calculateScore() {
    return this.questions.reduce((score, q) => {
      return score + (this.userAnswers[q.id] === q.correct ? 1 : 0)
    }, 0)
  }
}

进度和结果展示

显示当前题号、总题数和最终结果:

vue 实现答题功能

<div>进度: {{ Object.keys(userAnswers).length }}/{{ questions.length }}</div>
<button @click="calculateScore">提交答案</button>
<div v-if="score !== null">得分: {{ score }}/{{ questions.length }}</div>

高级功能扩展

  • 题型支持:通过 question.type 字段区分单选、多选、填空等题型
  • 状态持久化:使用 localStorage 保存答题进度
  • 动画效果:通过 Vue 的 <transition> 添加题目切换动画
  • API 集成:使用 axios 动态加载题目数据

完整示例(Composition API)

<script setup>
import { ref } from 'vue'

const questions = ref([
  // 题目数据
])
const userAnswers = ref({})
const score = ref(null)

const submit = () => {
  score.value = questions.value.reduce((total, q) => {
    return total + (userAnswers.value[q.id] === q.correct ? 1 : 0)
  }, 0)
}
</script>

标签: 功能vue
分享给朋友:

相关文章

vue 实现视频

vue 实现视频

Vue 实现视频播放功能 使用 Vue 实现视频播放功能可以通过 HTML5 的 <video> 标签或第三方库(如 video.js)来实现。以下是两种常见的方法: 使用 HTML5…

vue实现必填

vue实现必填

Vue 实现表单必填验证的方法 在Vue中实现表单必填验证可以通过多种方式完成,以下是几种常见的方法: 使用HTML5原生属性 最简单的必填验证可以通过HTML5的required属性实现: &l…

vue实现通讯

vue实现通讯

Vue 组件通讯方法 父子组件通讯 父组件向子组件传递数据通过 props,子组件向父组件传递数据通过 $emit 事件。 父组件模板: <child-component :message=…

vue 轮询实现

vue 轮询实现

轮询的基本概念 轮询是一种通过定时向服务器发送请求来获取最新数据的技术。适用于需要实时更新但无法使用WebSocket的场景。 使用setInterval实现轮询 在Vue组件中,可以通过setIn…

vue实现加载

vue实现加载

Vue 实现加载功能的方法 使用 v-if 或 v-show 控制加载状态 通过数据绑定控制加载动画的显示与隐藏。v-if 会完全移除 DOM 元素,v-show 只是切换 display 属性。…

vue实现数据渲染

vue实现数据渲染

Vue 数据渲染的实现方式 Vue.js 提供了多种数据渲染的方式,包括插值表达式、指令和计算属性等。以下是常见的实现方法: 插值表达式 使用双大括号 {{ }} 将数据绑定到模板中,数据变化时会自…