在v-for循环中的click事件之后,我遇到了data属性不更新的问题。vue组件如下所示:
<template>
<div v-if="showResults && placeholder === 'Country'" class="results-container">
<ul>
<li class="is-clickable" v-for="country in countries" :key="country.id" >{{country.name}}
<span class="is-pulled-right">
<img class="plus mr-2" src="/images/icons/plus.svg" />
<p @click="setChosen(country.id)" class="select-text">SELECT</p>
</span>
</li>
</ul>
</div>
</template>
<script>
export default {
name: "Searchbar",
props: {
placeholder: String,
},
data() {
return {
countries: null,
showResults: false,
chosenId:null,
chosenName: null,
searchInput:null,
};
},
methods: {
getCountries() {
axios
.get("/api/getCountries")
.then((response) => {
this.countries = response.data.data;
})
.catch((error) => {
console.log("error");
console.log(error);
});
},
setChosen(id){
this.chosenId = id;
}
},
mounted() {
this.getCountries();
},
};
</script>
`
我希望chosenId在点击时更新,但它实际上并没有更新,除非我更新dom,或者强制vue做出React。我做错了什么?我可以控制台日志的id完全好。
2条答案
按热度按时间b4qexyjb1#
你的代码应该工作正常,我没有看到任何问题。这是工作演示。你可以看一下,并尝试通过参考这个演示找到根本原因。
第一个
pgvzfuti2#
您是否检查了控制台中来自js/vue的一些错误/警告?
您的代码中存在一些问题。您的模板
<template/>
中有一个错误的结束标记。而
showResults
属性在你的代码中总是false
,所以,我看不出有任何方法可以显示你的国家选择列表。否则,如果你纠正上面提到的,就没有问题了。它工作得很好。
这里是Playground:
https://stackblitz.com/edit/vue-vdcfgp?file=src/components/Searchbar.vue
尝试使用
{{chosenId}}
调试-显示组件中的chosenId