背景
我有一个 Vue 组件,question-panel
它接受一个 prop questions
,它是一个对象数组并且长度可变。
在 中<template>...</template>
,有一些 HTML 元素来显示计算question
对象的信息,例如question.name
、question.score
等。
还有两个按钮可以调用previousQuestion()
和nextQuestion()
单击时。
问题
根据 Vue.js devtools,propquestions
确实绑定并响应来自父级的更改。
但是,即使在 prop更改后,question
也不会重新计算计算值。questions
另一方面,它确实会在questionIndex
更改时重新计算。
我应该如何解决这种行为?这种实现是否违反了 Vue 的原则?
QuestionPanel.vue 的片段
<script>
export default {
props: {
questions: Array,
},
data() {
return {
questionIndex: 0,
};
},
computed: {
question: function () {
return this.questions[this.questionIndex];
},
},
methods: {
previousQuestion() {
if (this.questionIndex > 0) {
this.questionIndex--;
this.$emit("questionChanged", this.question);
}
},
nextQuestion() {
if (this.questionIndex < this.questions.length - 1) {
this.questionIndex++;
this.$emit("questionChanged", this.question);
}
},
},
};
</script>
Parent.Vue 的片段
<paper-panel
@questionsArrived="Object.assign(questions, $event)"
></paper-panel>
<question-panel
:questions="questions"
></question-panel>