用vue 的子传父父传子有俩个子组件FlagItem,FlagItem,随机生成五道数学题
时间: 2024-04-01 09:34:01 浏览: 57
好的,根据您的要求,我可以为您提供一个使用Vue.js实现的示例,其中包含两个子组件:FlagItem和MathQuestion。FlagItem组件用于显示国旗和国家名称,MathQuestion组件用于显示数学问题并接收用户的答案。在父组件中,我们将随机生成五个数学问题,并将它们分别传递给五个MathQuestion组件。
以下是一个简单的实现:
父组件:
```html
<template>
<div>
<h2>请回答以下五道数学题:</h2>
<math-question v-for="(question, index) in questions" :key="index" :question="question" @answer="checkAnswer(index, $event)"></math-question>
</div>
</template>
<script>
import MathQuestion from './MathQuestion.vue'
import FlagItem from './FlagItem.vue'
export default {
components: {
MathQuestion,
FlagItem
},
data() {
return {
questions: []
}
},
mounted() {
this.generateQuestions()
},
methods: {
generateQuestions() {
for (let i = 0; i < 5; i++) {
const num1 = Math.floor(Math.random() * 10)
const num2 = Math.floor(Math.random() * 10)
const operator = Math.random() > 0.5 ? '+' : '-'
const question = `${num1} ${operator} ${num2}`
this.questions.push(question)
}
},
checkAnswer(index, answer) {
// 检查用户答案是否正确
console.log(`第 ${index + 1} 道题,用户答案:${answer}`)
}
}
}
</script>
```
FlagItem组件:
```html
<template>
<div>
<img :src="flag" :alt="country" width="100">
<p>{{ country }}</p>
</div>
</template>
<script>
export default {
props: {
flag: String,
country: String
}
}
</script>
```
MathQuestion组件:
```html
<template>
<div>
<p>{{ question }} = <input type="text" v-model="answer" @keydown.enter="submitAnswer"></p>
</div>
</template>
<script>
export default {
props: {
question: String
},
data() {
return {
answer: ''
}
},
methods: {
submitAnswer() {
this.$emit('answer', this.answer)
}
}
}
</script>
```
在父组件中,我们使用v-for指令循环渲染五个MathQuestion组件,将每个组件的问题通过props传递给它们。我们还为MathQuestion组件绑定了一个answer事件,以便在用户完成答题后检查答案。
在FlagItem组件中,我们使用props接收父组件传递的国旗和国家名称,并将它们显示出来。
您可以根据您的需求进行修改和优化,例如使用更多的子组件进行交互,添加更多的数学运算符或国家信息等。
阅读全文