vue.js - 当索引是动态值时,如何跟踪 Vue.js 中的数组变化?
问题描述
我正在使用 Node.js 和 Vue 构建一个应用程序。我的组件数据如下:
data() {
return {
campaign: {
buses: [],
weeks: [
{
oneWayBuses: [],
returnBuses: []
}
]
},
busesMap: {
// id is the bus ID. Value is the index in the campaign.buses array.
},
};
},
从服务器获取数据后,我用两种不同的方法填充 MOUNTED 部分中的 bus 和 week 数组:
responseForWeeks => {
responseForWeeks.forEach(
week => this.campaign.weeks.push(week);
)
}
responseForBuses => {
responseForBuses.forEach(
bus => this.campaign.buses.push(bus);
// Here I also fill the busesMap to link each week to its bus index in the array of buses
this.busesMap[bus.id] = this.campaign.buses.length - 1;
)
}
所以想法是我的 busMap 看起来像 busId 键和索引值:
busesMap = {
'k3jbjdlkk': 0,
'xjkxh834b': 1,
'hkf37sndd': 2
}
但是,当我尝试迭代数周时, v-if 不会更新,因此不会显示任何总线信息:
<ul>
<li
v-for="(busId, index) in week.oneWayBuses"
:key="index"
:item="busId"
>
<span v-if="campaign.buses[busesMap.busId]">
<strong>{{ campaign.buses[busesMap.busId].busLabel }}</strong>
leaves on the
<span>{{ campaign.buses[busesMap.busId].oneWayDepartureDate.toDate() | formatDate }}</span>
</span>
</li>
</ul>
另一方面,如果我将v-if
条件缩短为campaign.buses
,那么我进入条件但campaign.buses[busesMap.busId]
仍然未定义,所以我得到一个 ERROR 试图显示busLabel
和oneWayDepartureDate
我已经深入阅读了 vue 文档,但无法提出解决方案。你能找出任何陷阱吗?
解决方案
尝试这个:
async mounted(){
await responseForWeeks
await responseForBuses
responseForWeeks => {
responseForWeeks.forEach(
week => this.campaign.weeks.push(week);
)
}
// this is partial since it is what you provided
responseForBuses => {
responseForBuses.forEach(
bus => this.campaign.buses.push(bus);
// Here I also fill the busesMap to link each week to its bus index in the array of buses
this.busesMap[bus.id] = this.campaign.buses.length - 1;
)
}
}
基本上,您要确保在组件加载之前,您的数据就位。您还可以创建计算属性,如果依赖项发生更改并且它们在 dom 中,它将强制重新渲染。
推荐阅读
- python - 使用选择或滑块的散景更新地图工具提示
- php - 在 WooCommerce 前端、后端和电子邮件通知的结帐页面上显示自定义交付字段的结果
- azure-devops - 在 AZ DevOps 中查看哪些分支已经合并,哪些未合并
- c - 在文本中绘制曲线
- javascript - JS 输出未显示在 id 标签中
- python - SettingWithCopyWarning:转换列表
- javascript - Ionic-React 访问移动设备的本地存储
- sql - 仅显示具有连续覆盖的记录
- javascript - javascript 正则表达式最多 12 个小数位和 2 个浮点数
- c - 不兼容的指针类型结构节点到节点