如何在Nuxt SSR模式下更改页面的URL而不重新加载整个页面?

2023-11-24

  • 我正在尝试构建一个主详细信息视图,其中列表和详细信息在桌面上并排显示,但在移动设备上的不同页面上显示,如下图所示
  • 我的列表中可能有 500 到 10000 个项目要显示
  • 我用 10000 个项目模拟了这两种方法,请随意更改 server/app.js 文件中的数字

enter image description here

  • 当我单击列表中的某个项目时,我希望更改 URL,以便单击后退按钮转到上一个按钮。
  • 页面不应为此重新加载,并且应处于 SSR 模式

我尝试了什么?

方法 1 动态路由

  • 在pages文件夹内,我放置了一个articles文件夹和_id.vue文件,并添加了一个nuxt-link

  • 此设置非常非常慢,需要 20 秒才能更改摘要

  • 这是 CodeSandbox 上的方法 1

方法 2 带推送的自定义 @nuxtjs/router 模块

  • 我尝试使用自定义 @nuxtjs/module 而不是默认路由器

  • 通过这种方法,链接的选择速度要快得多,而且 URL 也会发生变化

  • 但是,如果我单击项目 4877,它会重新加载页面并且滚动条会返回到页面顶部?

  • 如何使滚动条保持在任何位置或防止重新加载页面?

  • 这是使用自定义路由器的 CodeSandbox 上的方法 2

简单的问题

  • 在 SSR 模式下如何在选择列表中的项目时更改 URL,而不重新加载页面?
  • 哪种方法更好?

无需重新加载页面或者刷新dom,history.pushState可以完成这项工作。
在您的组件或其他地方添加此方法来执行此操作:

addHashToLocation(params) {
  history.pushState(
    {},
    null,
    this.$route.path + '#' + encodeURIComponent(params)
  )
}

所以在你的组件的任何地方,调用addHashToLocation('/my/new/path')使用查询参数将当前位置推送到 window.history 堆栈中。

将查询参数添加到当前位置没有推动新的历史进入、使用history.replaceState反而。

应该与 Vue 2.6.10 和 Nuxt 2.8.1 一起使用。

使用这个方法要小心!
Vue Router不知道url已经改变,所以在pushState之后它不会反映url。

由于 Vue Router 不反映更改,因此无法获取 url 的参数。因此,我们必须处理不同的逻辑来在路由之间传递数据。这可以通过专用的 Vuex 存储来完成,或者简单地通过 Nuxt 全局总线事件来完成。

// main component
created() {
  // event fire when pushState
  this.$nuxt.$on('pushState', params => {
    // do your logic with params
  })
},
beforeDestroy() {
  this.$nuxt.$off('pushState')
},
...

// Where there are history.pushState
this.$nuxt.$emit('pushState', params)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在Nuxt SSR模式下更改页面的URL而不重新加载整个页面? 的相关文章

随机推荐

  • LINQ 中的动态 where 条件

    我有一个场景 我必须在 LINQ 中使用动态 where 条件 我想要这样的东西 public void test bool flag from e in employee where e Field
  • 在 Objective-C 中创建整数属性数组

    我在 Objective C 中创建整数数组的属性时遇到问题 我不确定这是否可以在 Obj C 中做到 所以我希望有人可以帮助我找出如何正确地做到这一点或提供替代解决方案 myclass h interface myClass NSObje
  • 如何分析在生产服务器上运行的 ASP.NET 应用程序?

    我有一个 ASP NET 应用程序 在生产服务器上始终使用 75 100 的 CPU 如何分析应用程序以找出代码的哪一部分占用了最多的 CPU 我研究了几种不同的工具 Xte Profiler EQATEC dotTrace 但它们似乎都希
  • `filter(func)` 和 `filter(|x| func(x))` 有什么区别?

    有什么区别filter x func x and filter func 也许一个好的起点是了解如何filter func 可以使用类似于以下的语法来编写filter x func x 我的代码如下所示 fn filter out dupl
  • Application.Current.MainWindow.Close 与 Application.Current.Shutdown

    Should Application Current Shutdown 不作为关闭 WPF 应用程序的最佳实践吗 我有一个小型的多窗口应用程序 关闭 似乎对我的所有退出命令都很有效 但是 我被告知要始终使用Application Curre
  • 使用 Nodejs 的 Firebase 电话身份验证

    我查看了 firebase 的文档 但没有得到任何在服务器端通过电话验证用户身份的答案 我发现的只是 FIREBASEUI 或客户端身份验证 那么 我如何通过服务器端对用户进行身份验证 例如以表单形式向他们提供电话号码的输入 并在该表单上向
  • datetime_select 的值为零?

    当使用 作为 新 对象表单时 如何将选项设置为默认不选择日期而是选择 nil null 值 相关模型中的字段可以选择为空 但默认情况下 datetime select 控件没有空选项 我想你想要 f datetime select star
  • 简单的去抖动例程

    您是否有一个简单的去抖例程可以方便地处理单个开关输入 这是一个简单的裸机系统 没有任何操作系统 我想避免具有特定计数的循环构造 因为处理器速度可能会波动 我想你可以在这里学到很多东西 http www ganssle com debounc
  • 如何忽略数组解构中的某些返回值?

    当我只对索引 0 之外的数组值感兴趣时 在数组解构时是否可以避免声明无用的变量 在下文中 我想避免声明a 我只对索引 1 及以后感兴趣 How can I avoid declaring a const a b rest 1 2 3 4 5
  • 如何使用 Node.js 抓取包含动态内容的页面?

    我正在尝试刮一个website但我没有得到一些元素 因为这些元素是动态创建的 我在node js中使用cheerio 我的代码如下 var request require request var cheerio require cheeri
  • 如何在coldfusion中使用CFQuery执行2个或多个插入语句?

    是否可以使用执行 2 个插入或更新语句cfquery 如果是的话怎么办 如果不是 在 Coldfusion 中执行多个查询的最佳方法是什么 即仅打开一个到数据库的连接 我想每次我们打电话cfquery我们正在打开新的连接数据库 是否可以执行
  • Ember、Ember 数据和 MongoDB 的 _id

    我已经看到有人讨论过这个问题 但我仍然对处理 Mongo 的问题有疑问 id into id 我使用 mongoose 作为我的 ORM 虽然它有虚拟 但我似乎无法让它正常工作 以下是我的猫鼬模型中的内容 尝试从后端修复 mongoose
  • 如何在列表视图中实现OnScrollListener?

    我从服务器获取 500 条记录 我想在列表视图中显示 10 个项目 当列表视图到达末尾时我需要加载另外 10 个项目 依此类推 我在网上看到了很多例子 但我无法解决它 请帮助我 这是我的代码 public void onCreate Bun
  • C# 泛型继承和协变第 2 部分

    这是我的原始线程 C 泛型继承和协变 仅在我的只读界面上 我希望继承起作用 public delegate Boolean EnumerateItemsDelegate
  • 包包含同名的对象和包

    我在使用 Maven 或 Eclipse 编译一些 Scala 时遇到问题 我尝试从包含命名空间和同名类的 Java jar 导入一个类 我可以编译scalac 然而 例如 Java 项目 jar 包含 src foo bar java s
  • 如何在 Node.js Web 应用程序中管理 MongoDB 连接?

    我正在使用节点 mongodb native用MongoDB驱动写一个网站 我对如何管理连接有一些疑问 仅使用一个 MongoDB 连接来处理所有请求是否足够 是否存在任何性能问题 如果没有 我可以设置一个全局连接以在整个应用程序中使用吗
  • Xcode 4.2 无法调试 iOS 4.2.1 (8C148)

    我最近更新到 Xcode 4 2 我还将我的新 iPad 2 和 iPod 最新一代 更新到了 iOS 5 我构建了我的应用程序并且可以毫无问题地调试它们 我运行 iOS 4 2 1 8C148 的旧版 iPod 无法运行 也没有出现任何错
  • Firebase BigQuery 服务器偏移时间

    背景 我正在将 Firebase 分析数据导出到 BigQuery 我正在使用 cron 作业来处理 BigQuery 中的数据以获得洞察力 Problem 为了能够只处理增量数据 即自上次运行 cron 作业以来到达的数据 我需要一种方法
  • .htaccess URL 重写挑战

    我在某些 URL 重写方面遇到问题 下面的所有内容都工作正常 但我需要添加一条从 URL 中删除查询字符串的规则 site com page a b会变成site com page 有人可以帮忙吗 我已经阅读了一些关于 htaccess 的
  • 如何在Nuxt SSR模式下更改页面的URL而不重新加载整个页面?

    我正在尝试构建一个主详细信息视图 其中列表和详细信息在桌面上并排显示 但在移动设备上的不同页面上显示 如下图所示 我的列表中可能有 500 到 10000 个项目要显示 我用 10000 个项目模拟了这两种方法 请随意更改 server a