vue.js - Vue:在挂载之前等待道具运行
问题描述
我有组件 ShopCart.vue(下面的代码),它正在从父级接收道具。这些道具之一是cartItems
。我在 cartItems 上运行一个函数,mounted()
但为了确保道具准备就绪,我将它们放入Vue.nextTick
,我在 StackOverflow 上将其视为解决方案。这似乎解决了问题,但我注意到它不可靠,并且在某些情况下,当函数准备好时 cartItems 会为空。为了测试这一点,我将它们放在 setTimeout 中 3 秒,然后 cartItems 有 20 个通过项目,所以我知道它正在工作..它运行得太快了。如何解决此问题以确保该组件中的道具已准备就绪?
ShopCart.vue 的一部分
export default {
data() {
return {
dataLoaded: false,
modalType: null,
orderNotes: null,
test: null,
expireTimes: {
}
}
},
props: {
cartItems: {type: Array},
cart: {type: Object},
customer: {type: Object}
},
mounted() {
let vm = this;
Vue.nextTick(() => {
vm.cartItems.forEach((item, index) => {
Vue.set(vm.expireTimes, item.item_id, "")
this.checkItemExpiry(item.expire_at, item.item_id)
});
});
}
解决方案
@Francisco Hanna 的答案对您有用,但是如果您仅在存在任何 cartItems 之后才使用v-if
渲染组件,则可以避免使用观察者(这会消耗资源) :shopCart
在父组件中:
<shop-cart :cartItems="cartItems" v-if="cartItems.length"></shop-cart>
推荐阅读
- php - PHP 和 SSL 中的 YouTube API
- symfony - 用于实体映射的 API 平台配置在最新版本中位于何处?
- asp.net-core-webapi - 用新的迁移 asp.net 核心覆盖数据库
- php - Laravel 5.6 有限的登录尝试不起作用(Throttles Logins)
- c# - C# - EF Lambda Include 用于选择 2 个类并从第二个类中排除属性
- c# - 在 DbContext 中创建模型后添加实体类型
- flyway - Flyway 中 SCHEMA_HISTORY.execution_time 的定义是什么?
- javascript - D3 过渡:持续时间不适用于线路路径
- python - 合并/平均比给定半径更近的邻居
- c# - 声明 new TextFieldParser() 时流数据丢失