路由问题 Vue.js 2 和浏览器历史记录

Trouble with routing Vue.js 2 and browser history

遇到这样的问题-我发送数据到/router-link/标签的props,当我点击link,我去文章,它获取数据,一切正常。那么,如果您在浏览器中按下 "back" 按钮,然后 "forward" 将没有文章,将出现没有数据的空字段。如何避免这种情况?

这是link文章

<h3 class="database-article__title">
    <router-link
        :to="{name : 'article',params: {
        id: item.id ,
        type:item.type ,
        name: item.name,
        text: item.text,
        author: item.author,
        isFavorite: item.isFavorite
    }}"> {{item.name}} </router-link>
</h3>

文章的一小部分-template.vue

<div class="content-type marketing">
    {{$route.params.type}}
</div>

<h3 class="database-article__title">
    {{$route.params.name}}
</h3>

<div class="database-article__text">
    {{$route.params.text}}
</div>

再次,数据传输良好,当您单击 link 时,所有内容都会显示。问题是当点击浏览器中的按钮 "back" 和 "forward" - 浏览器历史没有保存。

有谁知道问题的解决方法,或者我在哪里可以阅读解决方法?

谢谢!

我的猜测是您的 article 路由没有在其路径中指定任何这些参数。当你点击 link 时,vue-router 会记住你在 <router-link> 中指定的 params 对象,并且可以通过文章组件中的 $route.params 访问。

但是,当您单击浏览器的后退按钮和前进按钮时,不会像第一次那样通过单击 <router-link> 过渡到文章路径,并且由于这些参数未包含在路由的路径,$route.params 将为空。

我猜您只是想将数据从一条路线传递到另一条路线。如果您希望它在历史状态更改(即浏览器 back/forward)中持续存在,则:

  • 数据需要包含在 URL 中,作为参数(例如 /article/:id/:type 等,这需要在路由路径中预先指定)或在查询字符串中(例如 /article?id=1&type=foo).这不是这种情况的理想选择。
  • (推荐)以任何路由都可以访问的方式存储 item 对象。 Vuex 是一种方法,但这可能有点矫枉过正。

实际上,您的 URL 应该只需要包含文章的 ID,例如 /article/1。 type/name/etc 等所有其他内容不属于 URL。从 ID 中,您应该能够从 REST API(XHR 请求)中获取完整的文章对象,或者从内存中的数据存储抽象(Vuex 或其他任何东西)中获取它。