我正试图解决我的vue应用程序中的三个小问题。第一个是关于类绑定。我有一个引导卡,将显示一个问题和相关答案。用户点击无线电输入后,答案被保存,其他选项被禁用。
我正在动态检查用户的答案是否正确,但我无法动态更改卡片边框的类。我希望在给出答案之前有一个黑色边框,如果答案是正确的,则将边框类更改为border-success
或border-danger
,如果答案是错误的。我已经尝试了这段代码,但没有成功,如果没有给出答案,边框也会有border-danger
类。
<div class="card text-dark bg-light border-secondary shadow mt-3 mb-3" :class="[userAnswers[qindex] === correctAnswers[qindex] && answered[qindex] ? 'border-success' : 'border-danger']">
应用程序UI的另一个小问题是卡页脚。我已经添加了一个卡页脚,在回答显示的问题之前,它是不可见的。它将显示正确的答案,但我注意到,如果一个正确的答案是,它会做一个图形故障,将出现,然后消失。
<div class="card-footer bg-transparent border-success fw-bold" v-show="userAnswers[qindex] !== correctAnswers[qindex]">La risposta correttà è: {{ correctAnswers[qindex] }}</div>
为了尝试修复,我测试了v-if
和实际的v-show
,我还用css在元素上添加了一个过渡,但似乎不起作用
.card-footer {
transition: ease-in .3s;
}
最后一个也是最重要的问题是条件检查。我想显示一个模态时,用户已经回答了所有可用的问题。我尝试在vue的挂载钩子中添加一个if()
语句,但它永远不会被触发。我还尝试调用axios调用的.then()
回调函数中的方法,该方法将检查每个问题的答案,但没有成功。
export default {
name: 'App',
data(){
return {
isLoading: true,
showResult: false,
elaspedTime: null,
questions: [],
answered: {},
userAnswers: [],
correctAnswers: []
}
},
mounted(){
this.init();
// statement will be never evalued
if( this.answered.length === this.questions.length ){
this.quizResults();
}
},
methods: {
init(){
axios({
method: 'GET',
url: 'http://localhost:8990/init'
}).then( (res) => {
this.questions = [];
this.questions = res.data;
console.log(this.questions);
this.isLoading = false;
});
},
checkAnswer(qindex, index, value){
// console.log(qindex, index, value);
this.answered[qindex] = true;
this.userAnswers.push(value);
axios({
method: 'POST',
url: 'http://localhost:8990/answercheck',
data: {
questionIndex: index,
choice: value
}
}).then( (res) => {
console.log(res.data);
this.correctAnswers.push(res.data.correctAnswer);
});
},
quizResults(){
// some logics after all the questions are answered
console.log('Results');
}
}
}
有人能帮我找到解决这些问题的方法吗?谢谢你。
1条答案
按热度按时间x6h2sr281#
所以你有三个问题。
关于您的第一个问题:
你的问题是用
[]
Package 类的条件。这应该解决了它:关于你的第二个问题:
也许有一个机会,当你在等待响应表单服务器,
userAnswers[qindex]
有正确答案的值,而correctAnswers[qindex]
仍然是未定义的(直到你得到响应),在这一瞬间,他们不等于对方-这就是为什么你看到页脚一秒钟,然后它消失了。所以解决方案是检查:correctAnswers[qundex] && userAnswers[qindex] !== correctAnswers[qindex]
关于第三个问题
我认为最好的解决方案是像你尝试的那样把条件放在
checkAnswer()
的.then
中。你的问题是你检查了this.answered.length
,但this.answered
是一个Object而不是Array,它没有.length
属性。因此,您需要检查是否:Object.keys(this.answered).length === this.questions.length
所以你的方法应该是:
顺便说一下,当你在
mounted()
内部调用它时,你的条件不起作用的原因是因为mounted
只在组件加载时调用-它不监听更改。你可以在vue docs中阅读更多