gpt4 book ai didi

javascript - v-for 不重新渲染数组 vue js

转载 作者:行者123 更新时间:2023-12-05 06:16:51 25 4
gpt4 key购买 nike

我有一个 SPA,我在其中使用 v-for 显示 pokemon 数组,并可以选择按类型或世代过滤这些列表。我有一个清除过滤器的按钮(将类型设置为“”并将生成设置为第 1 代),但 v-for 循环不会在清除过滤器后重新呈现数组。我已经记录了返回 pokemon 数组的函数以确认它正在工作,但 Vue JS 不呈现结果。我不确定如何继续。

<div class="pokemon"
v-for="pokemon in filteredPokemon"
:key="pokemon.id">
<h2>{{ pokemon.name }}</h2>
</div>

<script>
import Pokemon from '../pokeData'

export default{
props: ['searchFilters'],
data(){
return{
allPokemon: [],
}
},
created(){
this.allPokemon = Pokemon.getPokemon('gen1');
},
computed: {
filteredPokemon: function(){
if(this.searchFilters.type){
if(this.searchFilters.type === ''){
return this.allPokemon
}
return this.allPokemon.filter(pokemon => {
if(pokemon.types.length === 2){
if(pokemon.types[0].type.name == this.searchFilters.type || pokemon.types[1].type.name == this.searchFilters.type){
return true
}
}
else if(pokemon.types[0].type.name == this.searchFilters.type){
return true
}
})
}
return this.allPokemon
}
},
watch:{
'searchFilters.generation': function(generation){
this.allPokemon = Pokemon.getPokemon(generation)
}
}
}
}
</script>

最佳答案

farincz 是对的,您正在通过对 getPokemon 的函数调用更改 allPokemon 的属性,而 Vue.JS 找不到更改(documentation),因此这是一个警告,您需要以不同的方式处理它方式,因为 Vue 不支持您想要的方式。

我将使用具有计算值的过滤方法过滤所有宠物小 Sprite ,并将过滤值绑定(bind)到数据属性:

HTML:

<template>
<div>
<textarea v-model="text" name="filter" cols="30" rows="2"></textarea>
<div class="pokemon" v-for="pokemon in filteredPokemon" :key="pokemon.id">
<h2>{{ pokemon.name }}</h2>
</div>
</div>
</template>

JS文件:

new Vue({
el: "#app",
data(){
return{
text: '',
pokemons: [
{gen: 'gen1', name: 'psyduck', id: '1'},
{gen: 'gen1', name: 'charizard', id: '2'},
{gen: 'gen1', name: 'pikachu', id: '3'},
{gen: 'gen2', name: 'togapi', id: '4'}
]
}
},
computed: {
filteredPokemon() {
if(this.text === '') return this.pokemons
return this.pokemons.filter(x=>x.gen === this.text)
}
}
})

这是 jsfiddle玩。

关于javascript - v-for 不重新渲染数组 vue js,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61936064/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com