【问题标题】:Losing router.params on page refresh在页面刷新时丢失 router.params
【发布时间】:2019-09-12 18:56:49
【问题描述】:

我在使用 vue-router 时遇到问题。
我在主页上有一个帖子列表。当我单击其中一个时,它会重定向到帖子页面,例如:

<router-link :to="{ name: 'article', params: {id: article.id, slug: article.slug } }"></router-link>

一切正常,我可以在 getter 中使用 this.$route.params.id 检索正确文章的数据。

我的问题:当我在文章页面上重新加载时,this.$route.params.id 未定义,这会导致整个应用程序崩溃。

尽管页面重新加载,我如何保存router.params

【问题讨论】:

  • 你的路由定义是什么?

标签: vue.js vuejs2 vue-router


【解决方案1】:

你应该这样路由:

{
      path: '/article/:id/:slug',
      name: 'article', 
}

在您看来,在路由时这样做:

this.$router.push({ name: 'article', params: { id: articleID, slug: articleSlug}});

不客气! ?

【讨论】:

    【解决方案2】:

    我在路由器中传递 url 时遇到了同样的问题

    /article/:id/:slug
    

    你不会在 resfresh 之后丢失你的参数,因为当refreshng vue 只会从 url 获取数据并且忘记你是否传递了参数

    【讨论】:

      【解决方案3】:

      您也可以使用query 代替参数

      <router-link :to="{ name: 'article', query: {id: article.id, slug: article.slug } }"></router-link>
      

      并在重定向页面上获得价值

      this.$route.query
      

      【讨论】:

        【解决方案4】:

        我不确定你的路由定义是什么,问题可能是路由 URL 中只有一个参数(例如/article/:slug)。

        当你调用一个路由(通过点击router-link 或调用router.push)时,你直接传递了两个参数并且它们在内存中持续存在。这就是为什么两者都可以访问。 但是当你重新加载页面时——Vue 所能做的就是解析你的 URL。 表示只解析了一个参数,因为只有一个参数存在。

        作为一种解决方案,您可以:

        • 在路由 URL 中使用这两个参数(例如/article/:id/:slug);
        • 或使用一个参数并调用您的 API 来检索剩余信息(例如,如果您的路线是 /article/:slug,则通过 slug 获取 id)。

        【讨论】:

          【解决方案5】:

          您使用的是什么后端?您需要enable history mode on your router,并在您的后端 Web 服务器上进行一些额外的配置更改。 Please refer to this link for the additional server side configuration changes 你需要让它正常工作。

          另外,please make note of this 404 caveat 使用 history mode..

          编辑:您可以尝试something like this,因为 ID 在 URL 中保持不变:MIKE AXLE 寻找解决方案

          我不知道是否有其他人遇到同样的问题,但我在刷新路由参数时遇到了问题。我试图获取的路由参数是一个 ID 号,我使用该 ID 来获取数据并填充页面。当我刷新时,我发现(通过许多控制台日志),数字变成了一个字符串,这就是页面无法正常工作的原因。我对其进行了整理,但在使用之前将 ID 转换为数字:

          数字($route.params.id)

          【讨论】:

          • 感谢您的回复。我正在使用 Laravel。 Apache mod_rewrite 已经设置好了,还有 404 页面。我仍然有路由并且 URL 没问题,但是组件没有加载,因为我在其中使用了 this.$route.params.id,当我重新加载时这是未定义的
          • ID 是保留在 URL 中还是在刷新时也会被删除?
          • 它仍然存在于 URL 上
          • 这可能是一个长镜头,但你可以try this solution我已经用可能的解决方案更新了我的答案(不是标记为接受的那个,它下面的那个)
          • 确实是这样!非常感谢:)
          猜你喜欢
          • 2014-12-31
          • 1970-01-01
          • 2022-11-13
          • 2020-08-28
          • 2016-01-26
          • 2019-02-09
          • 1970-01-01
          • 1970-01-01
          • 2020-09-07
          相关资源
          最近更新 更多