vue实现插入题目
Vue 实现插入题目的方法
在 Vue 中实现插入题目功能,通常需要结合表单绑定、动态渲染和数据管理。以下是几种常见的实现方式:
使用 v-model 绑定表单输入
通过 v-model 实现题目数据的双向绑定,适用于简单的题目插入场景。
<template>
<div>
<input v-model="newQuestion" placeholder="输入题目内容" />
<button @click="addQuestion">添加题目</button>
<ul>
<li v-for="(question, index) in questions" :key="index">
{{ question }}
</li>
</ul>
</div>
</template>
<script>
export default {
data() {
return {
newQuestion: '',
questions: []
}
},
methods: {
addQuestion() {
if (this.newQuestion.trim()) {
this.questions.push(this.newQuestion)
this.newQuestion = ''
}
}
}
}
</script>
动态组件实现复杂题目类型
对于需要支持多种题目类型(单选、多选、填空等)的场景,可以使用动态组件。

<template>
<div>
<select v-model="selectedQuestionType">
<option value="single">单选题</option>
<option value="multiple">多选题</option>
<option value="text">填空题</option>
</select>
<component :is="selectedQuestionType" @add="handleAddQuestion" />
<div v-for="(question, index) in questionList" :key="index">
<!-- 渲染题目列表 -->
</div>
</div>
</template>
<script>
import SingleQuestion from './SingleQuestion.vue'
import MultipleQuestion from './MultipleQuestion.vue'
import TextQuestion from './TextQuestion.vue'
export default {
components: { SingleQuestion, MultipleQuestion, TextQuestion },
data() {
return {
selectedQuestionType: 'single',
questionList: []
}
},
methods: {
handleAddQuestion(question) {
this.questionList.push(question)
}
}
}
</script>
使用 Vuex 管理题目状态
当题目数据需要跨组件共享时,可以使用 Vuex 进行状态管理。
// store.js
export default new Vuex.Store({
state: {
questions: []
},
mutations: {
ADD_QUESTION(state, question) {
state.questions.push(question)
}
},
actions: {
addQuestion({ commit }, question) {
commit('ADD_QUESTION', question)
}
}
})
服务端持久化存储
实现题目数据的持久化,通常需要调用 API 将数据保存到服务器。

methods: {
async submitQuestions() {
try {
const response = await axios.post('/api/questions', {
questions: this.questions
})
console.log('保存成功', response.data)
} catch (error) {
console.error('保存失败', error)
}
}
}
实现富文本题目编辑
对于需要富文本编辑的题目,可以集成第三方编辑器如 Quill 或 TinyMCE。
<template>
<div>
<quill-editor v-model="richQuestion" />
<button @click="addRichQuestion">添加富文本题目</button>
</div>
</template>
<script>
import { quillEditor } from 'vue-quill-editor'
export default {
components: { quillEditor },
data() {
return {
richQuestion: ''
}
},
methods: {
addRichQuestion() {
this.$store.dispatch('addQuestion', {
type: 'rich',
content: this.richQuestion
})
}
}
}
</script>
题目验证与反馈
在插入题目时添加验证逻辑,确保数据的完整性。
methods: {
validateQuestion(question) {
if (!question.content) {
this.$message.error('题目内容不能为空')
return false
}
if (question.type === 'single' && !question.options) {
this.$message.error('单选题必须包含选项')
return false
}
return true
},
addValidatedQuestion() {
if (this.validateQuestion(this.newQuestion)) {
this.addQuestion()
}
}
}
以上方法可以根据实际需求进行组合和扩展,构建适合不同场景的题目插入功能。






