javascript - 在 vue.js 中渲染子组件之前,等待父组件安装/准备就绪

标签 javascript vue.js vue-router

在我的 SPA 应用中,我有一个 <app-view>处理基本应用程序代码(加载用户数据、呈现导航栏和页脚等)并具有 slot 的包装器用于呈现实际页面。此插槽仅在用户数据可用时呈现

创建此包装器是因为某些页面需要不同的基本代码,因此我无法将此基本代码保留在包含 <router-view> 的主应用程序中不再。

我尝试查看 vue-router 是否提供高级选项或建议用于切换基本代码的设计模式,但没有找到任何东西。

问题在于,子组件将在父组件挂载之前渲染,即在父组件决定不渲染子组件之前(因为它正在加载用户数据)。这会导致类似 undefined as no attribute foo 的错误.

正因为如此,我正在寻找一种方法来推迟子渲染,直到它的父级被挂载。

最佳答案

我遇到了类似的问题,但不是 SPA。我有需要来自父组件的数据的子组件。问题是数据只会在父级完成挂载后生成,所以我最终在子级中得到了空值。

我就是这样解决的。我使用 v-if 指令仅在父级完成安装后才安装子级。 (在 mounted() 方法中)看下面的例子

<template>
  <child-component v-if="isMounted"></child-component>
</template>
<script>
  data() {
     isMounted: false
  }, mounted() {
     this.isMounted = true
  }
</script>

之后, child 可以从 parent 那里获取数据。 它有点不相关,但我希望它能给你一个想法。

关于javascript - 在 vue.js 中渲染子组件之前,等待父组件安装/准备就绪,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48766904/

相关文章:

javascript - 语法错误 : missing variable name

reactjs - React.js 是否有类似 Vue.js 的修饰符 "v-model.lazy"

typescript - Vue + TypeScript + CSS 模块

vue.js - 如何在 bootstrap-vue 中为 b-form-checkbox-group 设置所需的验证?

javascript - 循环遍历函数中的多个变量

javascript - 为什么这个递归在 Javascript 上不起作用?

javascript - 如何拆分字符串数组并返回具有键/值对的单个对象

vue.js - 如何在 Vue.js 中获取点击元素的父元素

javascript - VueRouter 不滚动到 anchor 标签

jquery - 克隆的路由器链接应该加载到子路由器 View 上,但它也会重新加载主路由器 View