vue.js - 您能帮我解决我的 vue 代码中的落后问题吗?
问题描述
我有一个关于我的 vue 代码的问题,我正在制作一个过滤器下拉列表,但是当我输入一个键来触发用于过滤 arr 的按键按下事件时,它每次在第二个事件之后都会更改 dom(落后一步)。
这是代码笔:
https://codepen.io/dyonvangerwen/pen/zYvjMdY
它只保留 arr 中与输入匹配的值
模板:
<div id="app">
<v-app id="inspire">
<v-form>
<v-container>
<v-row>
<v-col cols="12" sm="6" md="3">
<v-text-field
v-model="inputValue"
label="Filled"
placeholder="Placeholder"
filled
v-on:keydown="tester"
></v-text-field>
<v-card
class="mx-auto"
max-width="400"
tile
>
<v-list-ite >
<v-list-item-content v-for=" item in itemsInDropdown" :key="item">
<v-list-item-title>{{item}}</v-list-item-title>
</v-list-item-content>
</v-list-ite>
</v-card>
</v-col>
</v-row>
</v-container>
</v-form>
</v-app>
</div>
脚本:
new Vue({
el: '#app',
vuetify: new Vuetify(),
data: () => ({
inputValue:'',
itemsInDropdown:['a','b','c','d','e','ab','cd','ea']
}),
methods:{
tester:function(){
this.itemsInDropdown = this.itemsInDropdown.filter((x)=>{
if(x.includes(this.inputValue)){
return true
}
else{return false}
})
}
}
})
解决方案
computed
在这种情况下最好使用:
- 用这个替换方法:
computed:{
itemsInDropdownFiltered:function(){
return this.itemsInDropdown.filter((x)=>{
return x.includes(this.inputValue);
});
}
}
- 将要渲染的数组从 更改
itemsInDropdown
为itemsInDropdownFiltered
,如下所示:
<v-list-item-content v-for="item in itemsInDropdownFiltered" :key="item">
推荐阅读
- rsocket - 为什么在已连接的套接字上订阅 RSocket connectionStatus() 会导致两个回调调用?
- mysql - 从 STATION 表中选择以元音开头和结尾的城市名称
- javascript - Electron js webContents.print 选项不起作用(总是在 A4 页面上打印)
- laravel - 按不适用于 Laravel Dusk 中的选择器
- arrays - Powershell - 如何检索对象 [] 数据
- c# - RabbitMQ.Client.Exceptions.BrokerUnreachableException:'指定的端点都不可到达'
- javascript - 使用 css 和 javascript 垂直滚动文本
- sql - 在dataGrip中激活外键约束错误
- java - Java游戏 - 2个字符之间的碰撞问题
- python - Pandas 将列表拆分为多行