当前位置:首页 > VUE

vue实现填空答题功能

2026-01-21 13:15:54VUE

Vue 实现填空答题功能

数据绑定与动态渲染

使用 Vue 的 v-model 实现填空题输入框的双向绑定。通过 v-for 动态渲染题目和填空区域,数据存储在组件的 data 中。

<template>
  <div v-for="(question, index) in questions" :key="index">
    <p v-html="renderQuestion(question.text)"></p>
    <input 
      v-model="question.userAnswer" 
      :placeholder="'填空 ' + (index + 1)"
    >
  </div>
</template>

<script>
export default {
  data() {
    return {
      questions: [
        { text: 'Vue的核心特性是__1__', userAnswer: '' },
        { text: '双向绑定通过__2__指令实现', userAnswer: '' }
      ]
    }
  },
  methods: {
    renderQuestion(text) {
      return text.replace(/__\d+__/g, '<span class="blank"></span>');
    }
  }
};
</script>

填空题模板解析

通过正则表达式替换题目中的占位符(如 __1__)为空白输入框。使用 v-html 渲染处理后的 HTML,注意对用户输入进行安全过滤。

methods: {
  renderQuestion(text) {
    // 实际项目中需对用户输入做XSS过滤
    return text.replace(/__\d+__/g, '<span class="blank"></span>');
  }
}

答案校验功能

添加校验按钮和方法,对比用户答案与预设答案。可通过计算属性实时验证或手动触发验证。

data() {
  return {
    answers: { 1: '响应式', 2: 'v-model' },
    showResult: false
  }
},
methods: {
  checkAnswers() {
    this.showResult = true;
    this.questions.forEach(q => {
      const blankNum = q.text.match(/__(\d+)__/)[1];
      q.isCorrect = q.userAnswer === this.answers[blankNum];
    });
  }
}

样式与交互优化

为填空区域和验证结果添加视觉反馈,使用 CSS 增强用户体验。

.blank {
  border-bottom: 2px dashed #ccc;
  padding: 0 0.5em;
}
input {
  border: 1px solid #ddd;
  padding: 0.5em;
}
.correct { color: green; }
.incorrect { color: red; }

动态题目加载

从后端 API 获取题目数据时,使用生命周期钩子或异步方法加载。

async created() {
  try {
    const res = await axios.get('/api/questions');
    this.questions = res.data.map(q => ({
      ...q,
      userAnswer: ''
    }));
  } catch (error) {
    console.error('加载题目失败:', error);
  }
}

可复用组件设计

将填空题封装为独立组件,通过 props 接收题目数据,emit 提交答案事件。

// FillBlank.vue
props: {
  question: {
    type: Object,
    required: true
  }
},
emits: ['answer-change']

状态管理

对于复杂应用,使用 Vuex 或 Pinia 集中管理答题状态和进度。

// store.js
state: {
  questions: [],
  currentIndex: 0
},
mutations: {
  setAnswer(state, { index, answer }) {
    state.questions[index].userAnswer = answer;
  }
}

vue实现填空答题功能

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

相关文章

vue实现单点

vue实现单点

Vue 实现单点登录(SSO)方案 单点登录(SSO)允许用户在多个相关但独立的系统中使用同一组凭证登录。以下是基于 Vue 的实现方案: 基于 OAuth2/OpenID Connect 的实现…

vue 实现pdf

vue 实现pdf

在Vue中实现PDF功能 在Vue项目中实现PDF功能通常涉及PDF生成、预览或下载。以下是几种常见实现方式: 使用vue-pdf库预览PDF 安装依赖: npm install vue-…

vue拖拽实现

vue拖拽实现

Vue 拖拽实现方法 使用 HTML5 原生拖拽 API HTML5 提供了原生拖拽 API,可以通过 draggable 属性、dragstart、dragend、dragover 和 drop 事…

vue实现拖动

vue实现拖动

Vue实现拖动的常用方法 在Vue中实现拖动功能通常需要结合HTML5的拖放API或第三方库。以下是几种常见实现方式: 使用HTML5原生拖放API HTML5提供了原生拖放API,可以通过dra…

vue实现答辩

vue实现答辩

Vue 实现答辩系统的关键步骤 项目初始化与配置 使用 Vue CLI 或 Vite 创建项目,安装 Vue Router 管理路由,Pinia/Vuex 进行状态管理。配置 ESLint 和 Pre…

vue环境实现

vue环境实现

Vue 环境搭建 安装 Node.js 和 npm Node.js 是运行 Vue 的基础环境,npm 是包管理工具。从 Node.js 官网 下载并安装最新稳定版本。安装完成后,在终端运行以下命令验…