当前位置:首页 > VUE

vue实现单选答题功能

2026-01-23 07:09:31VUE

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

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

创建答题组件

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

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>部分添加基础样式,提升用户体验。

vue实现单选答题功能

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

vue单选实现

vue单选实现

Vue 单选实现方法 在 Vue 中实现单选功能可以通过多种方式完成,以下是常见的几种方法: 使用 v-model 绑定单选按钮 通过 v-model 绑定到同一个变量,实现单选效果: <t…

uniapp实现支付功能

uniapp实现支付功能

支付功能实现概述 在UniApp中实现支付功能通常需要对接第三方支付平台(如微信支付、支付宝支付等)。以下是基于微信支付和支付宝支付的通用实现流程。 微信支付实现步骤 1. 配置支付权限 在微信开放…

vue实现网页功能

vue实现网页功能

Vue 实现网页功能的核心方法 创建 Vue 项目 使用 Vue CLI 或 Vite 快速初始化项目。Vue CLI 适合传统项目,Vite 适合现代轻量级应用。 npm init vue@lat…

vue实现checkbox单选

vue实现checkbox单选

Vue实现Checkbox单选功能 在Vue中实现Checkbox单选功能,可以通过以下几种方法: 方法一:使用v-model绑定单个变量 通过将多个Checkbox绑定到同一个变量,利用v-mo…

vue模板功能实现

vue模板功能实现

Vue 模板功能实现 Vue 的模板功能是 Vue.js 的核心特性之一,允许开发者通过声明式的方式将数据绑定到 DOM。以下是 Vue 模板功能的主要实现方式和相关技术细节。 插值语法 Vue 使…