乐趣区

关于javascript:注意避坑Vue-Router-4-路由参数在-createdsetup-时不可用

有幻想,有干货,微信搜寻 【大迁世界】 关注这个在凌晨还在刷碗的刷碗智。

本文 GitHub https://github.com/qq449245884/xiaozhi 已收录,有一线大厂面试残缺考点、材料以及我的系列文章。

你的可能曾经留神到,VUE 3 版本的 Vue router (4.0) 与其之前的版本有一些 breaking change 更改。大部分的 Vue Router API 都没有变动,而且迁徙过程也十分间接。然而,一个十分不显著但重要的变动经常被忽视,它可能导致难以调试的行为。当初所有的导航都是异步的

如果你想晓得为什么 URL 中的查问参数在你的 setup 办法或 created 钩子中无处可寻,但当插入它们时,它们依然呈现在模板中,不要来到,咱们来一探到底。

当初所有的导航都是异步的

为了摸索这一点,咱们将应用一个曾经装置了 Vue router 4.0 的 Vue 3 骨架利用的 barebones。你能够在这个 repo 中跟着代码走。

地址:https://github.com/Code-Pop/r…

我的项目下载下来后,运行 npm iinstall 而后 运行 npm run serve,界面如下所示:

如果你当初在 URL 中增加一些查问参数,如 <a href="http://localhost:8080/?param=1" target="blank">http://localhost:8080/?param=1</a>,页面会刷新,并将参数显示在界面上。

让咱们看一下 App.vue 外面内容,咱们在组件中增加了一个 created 的钩子。你会看到一个 console.log 行,它打印 $router.query 的内容,就像咱们在模板中的那样。

<template>
  <div id="nav">
    <router-link to="/">Home</router-link> |
    <router-link to="/about">About</router-link>
  </div>

  <router-view/>

  Query: 
  <pre>{{$route.query}}</pre>
</template>

<script>
export default {data: () => ({}),
  created () {console.log(this.$route.query)
  }
}
</script>

咱们持续,像方才一样,应用和不应用查问参数再次运行这个试验。

你会留神到,无论增加多少个参数,或者从新加载多少次页面,控制台打印的 this.$route.query 都是空的。

接着,让咱们来解开这个问题。

正如一开始提到的,一个常常被忽视的 Vue Router 4 的破坏性变动是,当初所有的导航都是异步的。正如文档所倡议的那样,在解决 transition 时,这一点变得更加显著,因为当 Router 从空到被数据填充时,它将触发动画。

咱们之所以能在浏览器中看到参数,但在控制台中却看不到,是因为 Vue 的响应式的,一旦 Router 的查问对象可用,就立刻更新 HTML。记住,它当初是异步的。这个过程很快,以至于对咱们来说,它仿佛始终都在那里,当在 setup 函数或生命周期钩子(如created())中解决查问参数时,这可能真的会令人困惑。

修复问题

侥幸的是,这个问题的解决办法是非常简单。咱们只需到 main.js 中,期待路由 ready 好后再挂载程序,如下所示:

import {createApp} from 'vue'
import App from './App.vue'
import router from './router'

const app = createApp(App)
app.use(router)

// Replace -> app.mount('#app')
router.isReady().then(() => {app.mount('#app')
})

当初,回到浏览器,增加参数并从新加载,就会在管制台上看到咱们的参数信息了。

作者:Marina Mosti 译者:前端小智 起源:medium

原文:
https://www.vmastery.com/blog…

交换

文章每周继续更新,能够微信搜寻「大迁世界」第一工夫浏览和催更(比博客早一到两篇哟),本文 GitHub https://github.com/qq449245884/xiaozhi 曾经收录,整顿了很多我的文档,欢送 Star 和欠缺,大家面试能够参照考点温习,另外关注公众号,后盾回复 福利,即可看到福利,你懂的。

退出移动版