如何使用 VueJS 开发前端测验应用程序?
创建 VueJS 应用程序
在这里,我们将使用 Vue 2。运行以下命令来创建 VueJs 应用程序。
vue 创建测验应用程序
你会看到这样的东西。
现在,借助以下命令导航到目录并运行服务器。
光盘测验添加npm 运行服务
本地主机将显示默认屏幕,如下所示。
创建用户界面
每个 Vue 组件都包含三个部分:
<template> 包含组件的 HTML 代码
<script> 包含业务逻辑
<style> 包含用于组件样式的 CSS 代码
对于我们的演示应用程序,我们将有两个组件:
测验组件
模态组件
文件夹结构
这是我们的文件夹结构的图像。这将是一个非常简单的结构。
现在让我们看看不同的文件,看看我们要做什么。记下文件名。
在这个瞬息万变的编程和开发世界中,让您的应用程序保持最新可能非常具有挑战性。
从我们这里聘请 Vue.js 开发人员,他们准备好与您的流程一起飞行,以战略性地实现您的业务目标。
App.vue 设置
App.vue 是所有组件(这里是 Quiz 和 Modal 组件)的父文件。让我们定义我们的组件。UI模板参考如下代码。
<模板>
<div id="应用程序">
<h2>测验应用</h2>
<quiz @quiz-completed="handleQuizCompleted" :key="quizKey" />
<自定义模态
v-show="showModal"
标头=“恭喜!”
subheader="你已经完成了测验!"
:得分=“得分”
@reload="更新测验"
@close="showModal = false"
/>
</div></模板>
解释
代码非常简单。
v – show="show Modal"会根据这个有条件地渲染模态。显示模态。
分数是从数据属性发送到模态的动态道具。
header和 subheader是两个静态属性。
重新加载和关闭是从模态页脚调用的自定义事件。
继续 < script > 标签。
解释
该逻辑将有两个方法
1. handle Quiz completed():它从 Quiz 组件接收用户分数并将其设置为本地状态 'this。分数'。它由我们在 Quiz 组件中定义的自定义事件“quiz-completed”触发。
2. update Quiz():该方法将键绑定到“quiz Key”数据属性。它将由 CustomModal 组件的“重新加载”事件进一步触发,将“测验键”递增一个。
创建组件
进一步推进我们的教程,使用 VueJS 开发前端测验应用程序。接下来我们将从我们的组件开始:Quiz Component 和 CustomModal Component。
CustomModal.vue
文件 CustomModal.vue 将包含模态的 UI 和逻辑代码。请参考下面的代码。
<模板>
<转换名称="模态">
<div class="modal-mask">
<div class="modal-wrapper">
<div class="模态容器">
<div class="modal-header">
<h2>{{ 标题}}</h2>
<h3>{{ 子标题 }}</h3>
</div>
<div class="modal-body">
<div id="分数">
你回答了
<span class="高亮">
{{
数学.floor(
(score.correctlyAnsweredQuestions / score.allQuestions) *
100
)
}}
% 正确!
</span>
已回答
<span class="高亮">
{{ score.correctlyAnsweredQuestions }} 出
{{ score.allQuestions }}
</span>
问题。
</div>
</div>
<div class="模态页脚">
<按钮
id="再玩一次"
类=“按钮页脚”
@click="$emit('重新加载')"
>
再玩一次
</按钮>
<按钮
id="关闭按钮"
类=“按钮页脚”
@click="$emit('关闭')"
>
关闭
</按钮>
</div>
</div>
</div>
</div>
</过渡></模板>
解释
score 道具包含用户正确回答了多少问题,还包含问题总数。
我们使用从 Quiz 组件的自定义事件中收到的 score 道具。模态页脚将有两个按钮发出自定义事件以重新加载和关闭模态。
测验.vue
这是测验组件的代码。
<模板>
<div 类="容器">
<div class="correctAnswers">
你有
<strong>{{ correctAnswers }} 正确 {{ pluralizeAnswer }}!</strong>
</div>
<div class="correctAnswers">
目前在 {{ index + 1 }} 的 {{ questions.length }} 中
</div>
<h2 v-html="loading ? 'Loading...' : currentQuestion.question" ></h2>
<!-- 只显示第一个问题 -->
<form v-if="currentQuestion">
<按钮
v-for="在 currentQuestion.answers 中回答"
:index="currentQuestion.key"
:键=“答案”
v-html="答案"
@click.prevent="handleClick"
></按钮>
</表格>
</div></模板>
解释
“加载?'Loading...' : currentQuestion.question”将检查 loading 属性,并根据它决定'Loading...'或currentQuestion。
每个问题的答案都将存储在数组 answers 中。因此,我们将在“v-for”的帮助下循环答案并将每个答案显示为按钮元素。这样,v-html=”answer” 将在按钮上显示答案。
该逻辑将由稍后在脚本部分中看到的handleClick执行。
这是 Quiz 组件的逻辑部分。让我们一次选择一种方法,看看逻辑是什么。
获取问题
道具“问题”是用一个空数组初始化的。当“loading”为真时,我们将使用Trivia API获取问题,并在挂载组件时将它们推送到数组中。在这里,每次调用 API 时都会提取五个问题。
异步获取问题(){
this.loading = true;
//从API获取问题
让响应=等待获取(
“https://opentdb.com/api.php?amount=5&category=21&type=multiple”
);
让索引= 0;//识别单一答案
让 data = await response.json();
让问题 = data.results.map((问题) => {
问题.答案= [
问题.correct_answer,
...question.incorrect_answers,
];
//打乱上面的数组
for (let i = question.answers.length - 1; i > 0; i--) {
const j = Math.floor(Math.random() * (i + 1));
[问题.答案[i],问题.答案[j]] = [
问题.答案[j],
问题.答案[i],
];
}
//添加正确的答案和关键
问题.rightAnswer = null;
问题。关键=索引;
索引++;
返回问题;
});
this.questions = 问题;
this.loading = false;
},
显示当前问题
计算属性currentQuestion()将返回当前索引处的当前问题。
当前问题(){
如果 (this.questions !== []) {
返回 this.questions[this.index];
}
返回空值;
},
计算正确答案
下面的代码片段用于计算正确答案。
正确答案() {
如果(this.questions && this.questions.length > 0){
让 streakCounter = 0;
this.questions.forEach(函数(问题){
如果(!question.rightAnswer){
返回;
} else if (question.rightAnswer === true) {
条纹计数器++;
}
});
返回条纹计数器;
} 别的 {
返回 ” - ”;
}
},
计算分数
以下逻辑将计算分数。' score ()'将使用缩减程序数组原型将当前问题数组缩减为n个数字。它返回我们在customModal组件中使用的“分数”对象。
分数() {
如果 (this.questions !== []) {
返回 {
所有问题:this.questions.length,
回答问题:
this.questions.reduce((count, currentQuestion) => {
如果(currentQuestion.userAnswer){
// userAnswer 在用户回答问题时设置,无论是对还是错
计数++;
}
返回计数;
}, 0),
正确回答问题:this.questions.reduce(
(计数,当前问题)=> {
如果(currentQuestion.rightAnswer){
// rightAnswer 为真,如果用户回答正确
计数++;
}
返回计数;
},
0
),
};
} 别的 {
返回 {
所有问题:0,
回答问题: 0,
正确回答问题:0,
};
}
},
完成测验的观察者
我们将保持对quizCompleted()的观察,如果测验完成,它将发出事件并使用this.score向 App 组件显示分数。
手表: {
测验完成(完成){
完全的 &&
设置超时(()=> {
this.$emit("测验完成", this.score);
}, 3000);
},
},
检查正确答案
检查正确答案。为此,它将比较userAnswer,用户给出的答案,和correct_answer,API 给出的答案。它进一步相应地设置'.rightAnswer'和'.wrongAnswer'并管理索引状态以继续下一个问题。
checkCorrectAnswer(e,索引){
让 question = this.questions[index];
如果(问题。用户答案){
如果 (this.index < this.questions.length - 1) {
设置超时(
功能 () {
这个.index += 1;
}.bind(这个),
3000
);
}
如果(question.userAnswer === question.correct_answer){
/* 如果用户回答正确,则在 Button 上设置类,以动画 joyfulButton 庆祝正确答案 */
e.target.classList.add("rightAnswer");
/* 将 rightAnswer on question 设置为 true,计算属性可以跟踪连续 20 个问题 */
this.questions[index].rightAnswer = true;
} 别的 {
/* 将用户的回答标记为错误答案 */
e.target.classList.add("wrongAnswer");
this.questions[index].rightAnswer = false;
/* 显示正确答案 */
让 correctAnswer = this.questions[index].correct_answer;
让 allButtons = document.querySelectorAll(`[index="${index}"]`);
allButtons.forEach(函数(按钮){
如果(按钮。innerHTML === correctAnswer){
button.classList.add("showRightAnswer");
}
});
}
}
},
运行服务器
运行服务器后,点击浏览器,您的用户界面将如下所示
点击答案你会知道你的答案是否正确,同时显示下一个问题。在测验结束时,您将获得显示正确答案的计分板。
Github 存储库:VueJS 测验应用程序
请随意访问 github 源代码:VueJS Quiz App并克隆存储库以使用代码。
结论
所以,这是关于如何使用 VueJS 开发前端测验应用程序。您是 VueJS 的热衷学习者吗?如果是,那么VueJS 教程页面适合您!访问不同的教程并开始深入学习高级 VueJS 知识,或者也完善您的 VueJS 基础知识。
言鼎科技主做软件开发,微信小程序,网站开发,软件外包,手机APP开发。如有需要记得联系我们!