【发布时间】:2018-07-05 14:12:02
【问题描述】:
在 Vue.js 中,我有一个像这样的组件(答案组件):
<template>
<a class="quiz-input-choice" :class="{'quiz-input-choice--selected': answer.selected}"
@click="toggleSelect()" :selected="answer.selected">
<img :src="answer.image_path"/>
<p class="quiz-input-choice__description">{{answer.title}}</p>
</a>
</template>
<script>
export default {
props: ['answer'],
methods: {
toggleSelect() {
this.$parent.$emit('answer-selected', this.answer.id);
}
}
}
</script>
如果在父级(问题组件)中我更新了元素的“selected”属性,这个组件将不会被重新渲染。
export default {
props: ['question'],
components: {QuizAnswer},
created: function () {
let _self = this;
this.$on('answer-selected', id => {
let i = _self.question.answers.map(item => item.id).indexOf(id);
let answer = _self.question.answers[i];
answer.selected = !answer.selected;
});
}
}
在 Vue 开发者控制台中,我检查了答案组件数据是否已更新,因此答案被标记为选中。无论如何,不是用“quiz-input-choice--selected”类渲染的。
奇怪的是,如果我从 prop 的父级其他属性(例如 (answer.title))更新,则子组件也会正确呈现类“quiz-input-choice--selected”。 所以我想这是检测孩子变化的问题。
【问题讨论】:
-
旁注:您不需要
_self = this模式,因为您使用的是箭头函数
标签: javascript vue.js vuejs2