vue 嵌套路由,父级 重复调用,怎么解决?

发布于 2022-09-11 17:28:04 字数 260 浏览 11 评论 0

vue有如下路由嵌套:
/ > app.vue > a.vue >b.vue

app.vue是入口,a是2级路由 ,b是a的子级

当访问b路由时,写在a中的请求和一些列钩子事件都会被重复调用,该如何解决?

比如app.vue中的created里面有数据请求,访问a或者b时都会重复调用app.vue中的钩子。

  1. 是我的放置思路不对吗?还是vue本身就只能这么做?
  2. 有没有解决办法?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

生生漫 2022-09-18 17:28:04

在父组件的created或者mounted 判断路由名字 来执行接口

mounted() {
    if (this.$router.currentRoute.name == 'ViewMain') {
      this.父组件执行方法();
    }
 }
素食主义者 2022-09-18 17:28:04

理论上来说切换嵌套路由时并不会触发父组件中的created方法。

可能因为你设置了keep-alive加了一些判断重选渲染页面导致的。

给我一枪 2022-09-18 17:28:04

按照你的描述,如果是直接打开应用,通过 url 直接访问B,那么整个链路上的 created 肯定全部会被调用,这是必然的,如果你先打开啊,然后再跳转到 b,那么 app 和 a 的 created 肯定不会被调用,这也是必然的

中二柚 2022-09-18 17:28:04

我也遇到这问题了,每次进入嵌套的子路由,父路由的生命周期又会走一遍,导致父路由内的组件被重复创建。有时还会出现创建了2个父路由内组件实例的情况。

找了半天最后发现是在父路由本身被<keep-alive>导致的。

<keep-alive>去掉,一切正常。

我的结构是这样
App.vue > parent.vue > child.vue
访问时url是这样
http://localhost:3000/#/parent/child

问题就是出在App.vue

<keep-alive>
  <router-view ></router-view> // 导航到parent.vue
</keep-alive>

去掉keep-alive就行

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文