【发布时间】:2019-02-02 21:55:15
【问题描述】:
我已经选择在v-for循环中显示:
<div v-for="(n, key) in selectedLanguages">
<select class="input input__col"
v-model="currentLang[key]"
@change="changeLanguage(currentLang[key], key)"
id="lang_select">
<option value="pl">Polski</option>
<option value="en">Angielski</option>
<option value="es">Hiszpański</option>
</select>
</div>
对于每个选择,我添加了 changeLanguage 方法,即:
<script>
export default {
data() {
return {
currentLang: []
}
},
methods: {
changeLanguage(value, key) {
let data = { value, key };
this.$nuxt.$emit('change::language', data);
}
},
props: ['selectedLanguages']
}
</script>
它在子组件中。在父母中,我正在听这个change::language 事件:
this.$nuxt.$on('change::language', res => {
console.log(res);
this.selectedLanguages[res.key] = res.value;
console.log(this.selectedLanguages);
虽然它工作正常并且正在更新 selectedLanguages 数组,但它不会在父级中重新渲染插值 {{ selectedLanguages }}。然而,它正确地重新渲染插值{{ selectedLanguages }} 在子元素中它通过道具传递。为什么?
似乎 vue 没有“捕捉到”selectedLanguages 数组已更改。它只在我.push 或.pop 这个数组时看到。 vue中有apply之类的方法吗?
我在文档中找到了这个链接:https://vuejs.org/v2/guide/list.html#Caveats 并在我的作业下方的父级中添加了this.$set(this.selectedLanguages, res.value, res.key);,但它没有修复。
【问题讨论】:
标签: vue.js vuejs2 interpolation two-way-binding