当前位置:首页 > VUE

vue实现单选答题功能

2026-01-23 07:09:31VUE

实现单选答题功能的基本思路

在Vue中实现单选答题功能,可以通过v-model绑定选项值,结合v-for渲染选项列表,并监听选择事件。以下是一个完整的实现示例。

创建答题组件

新建一个Vue单文件组件(如SingleChoice.vue),包含题目、选项列表和提交逻辑。

<template>
  <div class="single-choice">
    <h3>{{ question.title }}</h3>
    <ul>
      <li v-for="(option, index) in question.options" :key="index">
        <input
          type="radio"
          :id="'option-' + index"
          :value="option.value"
          v-model="selectedOption"
        />
        <label :for="'option-' + index">{{ option.text }}</label>
      </li>
    </ul>
    <button @click="submitAnswer" :disabled="!selectedOption">提交</button>
    <p v-if="feedback">{{ feedback }}</p>
  </div>
</template>

定义组件数据与逻辑

<script>部分定义题目数据、选择状态和提交逻辑。

<script>
export default {
  data() {
    return {
      question: {
        title: "以下哪个是Vue的核心特性?",
        options: [
          { text: "双向数据绑定", value: "a" },
          { text: "虚拟DOM", value: "b" },
          { text: "组件化", value: "c" },
          { text: "以上都是", value: "d" }
        ],
        correctAnswer: "d"
      },
      selectedOption: null,
      feedback: ""
    };
  },
  methods: {
    submitAnswer() {
      if (this.selectedOption === this.question.correctAnswer) {
        this.feedback = "回答正确!";
      } else {
        this.feedback = "回答错误,请再试一次。";
      }
    }
  }
};
</script>

添加样式增强交互

<style>部分添加基础样式,提升用户体验。

<style scoped>
.single-choice {
  max-width: 600px;
  margin: 0 auto;
  padding: 20px;
}
ul {
  list-style: none;
  padding: 0;
}
li {
  margin: 10px 0;
}
button {
  margin-top: 15px;
  padding: 8px 16px;
  background-color: #42b983;
  color: white;
  border: none;
  border-radius: 4px;
}
button:disabled {
  background-color: #cccccc;
}
</style>

动态加载题目数据

如需从后端API获取题目,可在created生命周期钩子中发起请求。

created() {
  fetch('/api/questions/1')
    .then(response => response.json())
    .then(data => {
      this.question = data;
    });
}

处理多题目场景

对于多题目切换,可以在父组件中维护题目列表和当前索引。

// 父组件
data() {
  return {
    questions: [...], // 题目数组
    currentIndex: 0
  };
},
methods: {
  nextQuestion() {
    if (this.currentIndex < this.questions.length - 1) {
      this.currentIndex++;
    }
  }
}
<!-- 父组件模板 -->
<single-choice :question="questions[currentIndex]" @answered="nextQuestion" />

注意事项

  • 确保每个radio的id属性唯一,避免点击冲突
  • 使用v-model时,绑定的数据初始值应为null而非空字符串
  • 对于无障碍访问,建议为选项添加aria-label描述
  • 复杂场景可考虑使用Vuex管理答题状态

以上实现涵盖了单选答题的核心功能,可根据实际需求扩展验证逻辑、动画效果或积分系统。

vue实现单选答题功能

标签: 单选功能
分享给朋友:

相关文章

前端vue登录功能实现

前端vue登录功能实现

登录功能实现步骤 在Vue中实现登录功能通常需要结合后端API,以下是关键步骤和代码示例: 创建登录表单组件 <template> <div> <form…

vue实现倍速播放功能

vue实现倍速播放功能

实现倍速播放功能的方法 在Vue中实现倍速播放功能通常涉及HTML5的<video>元素或第三方播放器库(如video.js)的API调用。以下是具体实现方式: 使用原生HTML5…

vue实现名字查找功能

vue实现名字查找功能

实现名字查找功能 在Vue中实现名字查找功能,可以通过多种方式完成。以下是几种常见的实现方法: 使用v-model和computed属性 创建一个输入框,使用v-model绑定输入的值,通过com…

vue电影功能实现

vue电影功能实现

Vue 电影功能实现 数据获取与展示 使用 Axios 或 Fetch API 从电影 API(如 TMDb、豆瓣 API)获取数据。在 Vue 的 created 或 mounted 生命周期钩子中…

vue实现论坛功能

vue实现论坛功能

实现论坛功能的核心模块 论坛功能通常包含用户发帖、回帖、分类浏览、搜索等核心模块。Vue.js 作为前端框架,需配合后端 API 实现数据交互。 基础项目结构搭建 使用 Vue CLI 或 Vite…

vue实现粘贴功能

vue实现粘贴功能

实现粘贴功能的基本方法 在Vue中实现粘贴功能通常涉及监听paste事件,并处理剪贴板数据。以下是一个基础实现示例: <template> <div @paste="handl…