arrays - 让 vuejs 组件等待变量可用
问题描述
我有一个 VueJS 组件,它将数组的内容列出到页面中。runner.availableResources.cores
并runner.availableResources.memory
来自使用busmq
npm 包创建的总线。它们需要一段时间才能可用,大约需要 15 秒,具体取决于 IO 缓冲区,因此在页面呈现时不会立即可用。
错误是:[Vue warn]: Error in render: "TypeError: Cannot read property 'cores' of undefined"
如何让 Vue 不断检查值是否可用?
<template>
<b-col>
<b-table striped hover :items="formatRunners"></b-table>
</b-col>
</template>
<script>
const fileSize = require("filesize");
export default {
name: "RunnersList",
props: {
runners: Array
},
computed: {
formatRunners() {
const runnerItems = [];
for (const runner of this.runners) {
const newItem = {};
newItem.id = runner.id;
newItem.isPublic = runner.marathon.isPublic;
newItem.AvailableCpu = runner.availableResources.cores;
newItem.AvailableMemory = fileSize(runner.availableResources.memory);
runnerItems.push(newItem);
}
return runnerItems;
}
},
data() {
return {};
}
};
</script>
解决方案
这不是一个真正美观的解决方案,但这里有一个快速的解决方法:
在您的模板中,添加以下v-if
条件:
<b-table v-if="haveResourcesLoaded" striped hover :items="formatRunners"></b-table>
然后在您的计算属性中,添加相应的属性:
haveResourcesLoaded() {
if (this.runners.length > 0) {
return this.runners[0].availableResources !== undefined
}
return false
}
如果您需要以更好和更可控的方式进行操作,您应该查看文档,该bus.isOnline()
方法可能就是您正在寻找的。
推荐阅读
- c++ - 在 constexpr 函数中使用 MSVC 的 __popcnt
- java - 如何在没有按钮的 Android 应用程序开始时让图像淡出
- android - 如何使用graphhopper android库在带有mapforge的android studio中进行离线路由
- tensorflow - 在 JETSON TX2 上部署 YoloV3
- r - 使用 influxr_write 将日期写入 influxdb
- bash - 如何在创建 gnome-terminal 命令的脚本中获取终端的 PID,但保持终端处于活动状态以供以后使用
- jquery - jQuery Swal 使用 Prevent Default 然后在确认后触发
- vue.js - vue.js 中的过滤下拉选项
- python - 将字典写入文件只会产生键
- python - 如何在pyqt5中使用geemap而不是folium?