当前位置:首页 > 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>');
  }
}

答案校验功能

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

vue实现填空答题功能

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 获取题目数据时,使用生命周期钩子或异步方法加载。

vue实现填空答题功能

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 列表实现方法 使用 v-for 指令 v-for 是 Vue 中用于渲染列表的核心指令,基于数据源动态生成 DOM 元素。语法格式为 item in items 或 (item, index)…

vue compile 实现

vue compile 实现

Vue 编译实现原理 Vue 的编译过程将模板字符串转换为渲染函数,主要分为解析、优化和代码生成三个阶段。 解析阶段(Parse) 将模板字符串转换为抽象语法树(AST)。Vue 使用正则表达式和有…

vue代理实现

vue代理实现

Vue 代理实现方法 在 Vue 项目中,配置代理可以解决开发环境下的跨域问题,通常通过修改 vue.config.js 文件实现。以下是几种常见的代理配置方式: 基础代理配置 在 vue.conf…

vue实现弹幕

vue实现弹幕

Vue 实现弹幕功能 弹幕功能通常包括动态生成、滚动显示、颜色和速度随机化等特性。以下是基于 Vue 3 的实现方法。 核心思路 使用 CSS 动画控制弹幕从右向左滚动。 动态生成弹幕数据,随机设置…

vue实现插件

vue实现插件

Vue 插件实现方法 Vue 插件通常用于为 Vue 应用添加全局功能或共享功能。以下是实现 Vue 插件的核心步骤: 插件基本结构 Vue 插件需要暴露一个 install 方法,该方法接收 Vu…

vue实现滑动条

vue实现滑动条

Vue 实现滑动条 在 Vue 中实现滑动条可以通过原生 HTML 的 <input type="range"> 或自定义组件实现。以下是两种常见方法: 使用原生 HTML 滑动条 通过…