HTML5历史记录API允许网页操纵历史堆栈的内容,以便动态更新URL并响应后退按钮。
单击项目时浅路由效果很好 <question vote="-1"><p><a href="https://i.sstatic.net/IxUgPj7W.png" rel="nofollow noreferrer"><img src="https://cdn.txt58.com/i/AWkuc3N0YXRpYy5uZXQvSXhVZ1BqN1cucG5n" alt="Shallow Routing works well when clicking on an item"/> 直接键入项目URL时,浅路由将抛出404 link link to Stackblitz显示了问题</a></p> <p><a href="https://i.sstatic.net/mnjCNRDs.png" rel="nofollow noreferrer"><img src="https://cdn.txt58.com/i/AWkuc3N0YXRpYy5uZXQvbW5qQ05SRHMucG5n" alt="Shallow routing throws 404 when typing item url directly in browser"/><code>src/routes/(news)/+layout.svelte</code></a></p><h3> <a href="https://stackblitz.com/edit/sveltejs-kit-template-default-jhgre8ys?file=src%2Froutes%2F(news)%2F%2Bpage.svelte" rel="nofollow noreferrer"><code><script lang="ts"> import './../../app.css' import { page } from '$app/stores'; import { pushState } from '$app/navigation'; import { MediaQuery } from 'svelte/reactivity'; const { children, data } = $props(); const large = new MediaQuery('min-width: 800px'); const hasNoDetailSelected = $derived.by(() => { return ( typeof $page.state.id === 'undefined' && typeof $page.state.title === 'undefined' ); }); function onClickItem() { pushState('/news/abcdabcd-abcd-abcd-abcd-abcdabcdabcd/title-1', {id: 'abcdabcd-abcd-abcd-abcd-abcdabcdabcd', title: 'title-1'}) } </script> <header class="header"> <h1> <a data-sveltekit-preload-data="off" href="/">TestNewsApp</a> </h1> </header> {#if large.current} <main style="flex-direction: row"> <div class="news-list-container"> <nav> <ul> <li onclick={onClickItem}>Item 1</li> </ul> </nav> </div> <div class="news-detail-container"> {@render children()} </div> </main> {:else if !large.current && hasNoDetailSelected} <main style="flex-direction: column"> <div class="news-list-container"> <nav> <ul> <li onclick={onClickItem}>Item 1</li> </ul> </nav> </div> </main> {:else} <main style="flex-direction: column"> <div class="news-detail-container"> {@render children()} </div> </main> {/if} <style> .news-detail-container { background-color: lightyellow; flex: 1; } .news-list-container { background-color: lightcyan; flex: 1; } main { display: flex; flex: 1; } </style> </code></a> </h3><p><strong><code>src/routes/(news)/+page.svelte</code><pre></pre></strong> </p><code><script lang='ts'> import {page} from '$app/stores'; </script> {#if $page.state.id && $page.state.title} <p>Detail Page</p> {:else} <p>Popular News</p> {/if} </code><pre> </pre>问题 <p> <strong>直接键入URL时,我该如何进行此项工作? <pre> </pre> </strong> </p> <pre>我认为我已经修复了它,但我不确定这是否是正确的方法</pre> thythythysy您需要处理SSR案例的浅层和深度路由<h3> </h3>I创建了a/news/ [id管理 <ul> <li></li></ul><code>routes/(news)/news/[id]/[title]/+page.svelte</code></question><answer tick="false" vote="0"><ul> <li><code><script lang='ts'> import {page} from '$app/state' const {data, id, title} = $props() </script> <p>Detail Page What? {id || page.params.id} {title || page.params.title}</p> </code></li> <li> </li>现在您需要将此苗条文件重复使用作为处理浅路由的组件<li> </li> </ul><p><strong><code>routes/(news)/+page.svelte</code><pre></pre></strong> </p><code><script lang='ts'> import {page} from '$app/stores'; import DetailPage from './news/[id]/[title]/+page.svelte' </script> {#if $page.state.id && $page.state.title} <DetailPage id={$page.state.id} title={$page.state.title} /> {:else} <p>Popular News</p> {/if} </code><pre> </pre> notice如何使用细节页面组件<ul> <li>路由/(news)/+布局的条件也必须修改以处理SSR和参数 </li> </ul><code> const hasNoDetailSelected = $derived.by(() => { return ( typeof $pageFromStore.state.id === 'undefined' && typeof $pageFromStore.state.title === 'undefined' && typeof pageFromState.params.id === 'undefined' && typeof pageFromState.params.title === 'undefined' ); }); </code><p> <strong><pre>固定的存储库是stackblitz</pre></strong> </p> <pre>如果这不是做事的方法,请随时建议</pre> <ul> <li> </li><li>
sveltekit浅层路由中的pushState根本没有设置page.state.cart
我有一个 sveltekit 应用程序。在一页中 -cart.svelte- 我按一个按钮转到页面,我在其中选择订单是取货还是送货 -ordertype.svelte- 但我丢失了购物车内容,因为它是 sv...
为什么在 Safari 16.* 和 Chrome 107.0.5304 中使用内置浏览器后退按钮时,history.pushState() 不受尊重?
我发现在这些版本的 Safari 和 Chrome 中,在没有用户输入的情况下将新的状态值推送到浏览器历史记录中会出现意外行为。它将正确更新状态。你会...
我发现当用户按下后退或前进按钮时会触发 popstate。但这是否意味着这是浏览器的默认行为。假设一个网站不使用SPA,点击一个链接loa...
如何防止history.pushState()和HTTP POST表单导致页面刷新时重新发布?
我目前面临 HTTP post 表单和历史推送状态的一个小问题。 当我的用户在 example.com/page-1 中提交 POST 表单,然后单击此页面中的链接时,他们将被重定向...
我使用静态构建包将 React 应用程序部署到 Cloud Foundry。目标是使应用程序可以在domain.com/path 下访问。所以我根据他的博文配置了路线:https://...
如何检索 popstate 事件是否来自 HTML5 Pushstate 的后退或前进操作?
我正在开发一个网页,根据下一个或后一个操作我执行相应的动画,使用推送状态时会出现问题。当我收到事件时,我如何知道用户是否是
浏览器上的 window.history.state 可能会出现哪些情况?
我网站的查询字符串 URL 如下: ?预算=0-&年份=0-&公里=0-&so=-1&sc=-1&pn=1 当用户转到下一页(从第 1 页到第 2 页)时: 我们明确增加 pn(页码...
带有pushstate的Yeomanbackbonejs导致grunt-contrib-connect出现问题
我的yeoman开发环境中有一个backbonejs应用程序。我的应用程序使用 Pushstate,但这会导致连接服务器在重新加载页面(通过实时重新加载)或...时发出 404 错误。
Google Cloud Storage 上的网站配置没有错误页面
我有一个单页应用程序,我正在(尝试)在 Google Cloud Storage 上托管它。 该应用程序位于index.html,并且该应用程序使用Angular的html5Mode处理路由。 (例如:路线...
我知道这个问题之前已经被问过很多次了,但答案的描述性不足以解决我的问题。我不想更改页面的整个 URL。我想在
history.pushstate 和 HTTP POST 表单转发
我目前面临 HTTP post 表单和历史推送状态的一个小问题。 当我的用户在 example.com/page-1 中提交 POST 表单,然后单击此页面中的链接时,他们将被重定向...
后退按钮与history.pushstate和popstate一起使用时如何触发更改?
在 js 方面我几乎是个新手,所以如果我错过了一些非常简单的东西,我很抱歉。 基本上,我已经对使用 History.pustate 和 popstate 进行了一些研究,并且我已经将其变成了
HTML5 History API - 状态对象的最大大小是多少?
pushState 方法接受一个状态对象。 Firefox 文档称该对象的最大大小为 640kb。规范中是否定义了浏览器可以实现的最小最大尺寸是多少? ...
我希望你能帮助我。 我想用动画更改页面(“主页”到“关于我们”)。但不重新加载内容。 我只想要“英雄旗帜”中的动画,b ...
将查询参数添加到url的末尾,并使用pushState进行查询。
我有一个页面,允许我通过 "过滤器 "标签来过滤帖子。我需要将任何被点击的过滤器添加为一个查询参数。例如,url看起来像这样:domain.comcategoryfiltered。当...
我在一个Rails 6.1的web应用中使用了Turbolinks。我知道Turbolinks使用AJAX来替换body,并使用history.pushState()来更新URL以匹配。我已经实现了一个对话式的...
Javascript – history.pushState中的绝对或相对URL
使用绝对或相对URL作为history.pushState url参数有区别吗? history.pushState(null,null,绝对/相对)我问是因为CMS PHP环境处理...
使用pushstate在两个页面之间导航时如何访问历史记录状态?
我正在编写我的第一个PWA,目前正在做一些研究,然后才着手编写任何代码。我可以绕开的一件事是2个缓存页面之间的导航。我的PWA ...
如何使用history.pushState将查询字符串变量附加到现有URL?
我目前有一个显示我所有项目的URL:http:// localhost:8090 / projects.php当我单击一个URL时,我可以使用以下简单代码在URL末尾附加一个变量:$(文档)...