当前位置:首页 > VUE

vue实现多填空

2026-03-08 13:23:41VUE

实现多填空功能的基本思路

在Vue中实现多填空功能,可以通过动态生成输入框并绑定数据来实现。核心是利用v-for指令遍历填空位置,结合v-model进行双向数据绑定。

基础实现方法

创建Vue实例,定义填空数据数组。模板中使用v-for循环生成输入框,每个输入框绑定到数组对应项。

<template>
  <div>
    <p>请填空:{{ sentenceParts[0] }} <input v-model="answers[0]"> {{ sentenceParts[1] }} <input v-model="answers[1]"> {{ sentenceParts[2] }}</p>
    <button @click="checkAnswers">检查答案</button>
  </div>
</template>

<script>
export default {
  data() {
    return {
      sentenceParts: ['Vue是', '开发的', '框架'],
      answers: ['', ''],
      correctAnswers: ['渐进式', '前端']
    }
  },
  methods: {
    checkAnswers() {
      this.answers.forEach((answer, index) => {
        if (answer === this.correctAnswers[index]) {
          console.log(`第${index + 1}空正确`);
        } else {
          console.log(`第${index + 1}空错误`);
        }
      });
    }
  }
}
</script>

动态生成填空

对于更灵活的场景,可以动态解析包含填空标记的文本,自动生成填空位置。

<template>
  <div>
    <div v-html="processedText"></div>
    <button @click="checkAnswers">提交答案</button>
  </div>
</template>

<script>
export default {
  data() {
    return {
      originalText: 'Vue是__1__开发的__2__框架',
      answers: {},
      correctAnswers: {1: '渐进式', 2: '前端'}
    }
  },
  computed: {
    processedText() {
      let parts = this.originalText.split(/(__\d+__)/g);
      return parts.map(part => {
        if (part.match(/__\d+__/)) {
          const num = part.replace(/_/g, '');
          return `<input v-model="answers['${num}']">`;
        }
        return part;
      }).join('');
    }
  },
  methods: {
    checkAnswers() {
      Object.keys(this.correctAnswers).forEach(key => {
        if (this.answers[key] === this.correctAnswers[key]) {
          console.log(`填空${key}正确`);
        } else {
          console.log(`填空${key}错误`);
        }
      });
    }
  }
}
</script>

使用组件封装

对于复杂场景,可以创建专门的填空组件提高复用性。

<template>
  <fill-blank :text="questionText" :answers="correctAnswers" @submit="handleSubmit" />
</template>

<script>
import FillBlank from './FillBlank.vue';

export default {
  components: { FillBlank },
  data() {
    return {
      questionText: 'Vue是__1__开发的__2__框架',
      correctAnswers: {1: '渐进式', 2: '前端'}
    }
  },
  methods: {
    handleSubmit(userAnswers) {
      Object.keys(this.correctAnswers).forEach(key => {
        if (userAnswers[key] === this.correctAnswers[key]) {
          console.log(`填空${key}正确`);
        }
      });
    }
  }
}
</script>

FillBlank组件实现:

<template>
  <div>
    <div v-html="processedText"></div>
    <button @click="submit">提交</button>
  </div>
</template>

<script>
export default {
  props: ['text', 'answers'],
  data() {
    return {
      userAnswers: {}
    }
  },
  computed: {
    processedText() {
      let parts = this.text.split(/(__\d+__)/g);
      return parts.map(part => {
        if (part.match(/__\d+__/)) {
          const num = part.replace(/_/g, '');
          this.$set(this.userAnswers, num, '');
          return `<input v-model="userAnswers['${num}']">`;
        }
        return part;
      }).join('');
    }
  },
  methods: {
    submit() {
      this.$emit('submit', this.userAnswers);
    }
  }
}
</script>

样式优化建议

为填空输入框添加特定样式,提升用户体验。

vue实现多填空

.fill-blank-input {
  border-bottom: 1px dashed #333;
  width: 100px;
  text-align: center;
  margin: 0 5px;
}

.correct {
  background-color: #d4edda;
}

.incorrect {
  background-color: #f8d7da;
}

标签: vue
分享给朋友:

相关文章

vue实现https

vue实现https

Vue 中实现 HTTPS 的步骤 在 Vue 项目中实现 HTTPS 主要涉及开发环境配置和生产环境部署。以下是具体方法: 开发环境配置(Vue CLI 或 Vite) 使用 mkcert 生成…

vue能实现

vue能实现

Vue.js 是一个流行的前端框架,能够实现多种功能。以下是 Vue 能够实现的主要功能和特性: 响应式数据绑定 Vue 的核心特性之一是响应式数据绑定。通过数据驱动视图,当数据发生变化时,视图会自…

vue实现 toast

vue实现 toast

Vue 实现 Toast 组件 在 Vue 中实现 Toast 组件可以通过多种方式完成,以下是几种常见的方法: 使用全局组件和事件总线 创建一个全局的 Toast 组件,并通过事件总线或 Vue…

vue 实现打印

vue 实现打印

Vue 实现打印功能的方法 在Vue项目中实现打印功能,可以通过以下几种方式实现: 使用window.print()方法 通过调用浏览器的原生打印API实现基础打印功能,适用于简单内容打印。 //…

vue实现treeview

vue实现treeview

Vue 实现 TreeView 的方法 使用递归组件实现 TreeView 递归组件是 Vue 中实现 TreeView 的常见方式。通过组件调用自身,可以轻松处理嵌套的树形结构数据。 <te…

vue实现增删

vue实现增删

Vue 实现增删功能 在 Vue 中实现增删功能通常涉及数据绑定、事件处理和列表渲染。以下是基于 Vue 2 或 Vue 3 的实现方法: 数据定义 初始化一个数组用于存储列表数据,并在 Vue 实…