我正在尝试访问当前路线,以便在当前路线为“/”时有条件地重定向访问者。我现在设置的方式是,如果您在地址栏中输入重定向,则任何路线都会发生重定向。我现在唯一的候选解决方案是创建一个保存当前路径的存储,并使用该存储设置仅当存储值为“/”时才导航的条件。但我想知道是否有更有效的方法来做到这一点?
这里是app.svelte
<script>
import {Router, navigate, Route} from "svelte-routing";
import { user, loading } from "./lib/store";
import Authentication from "./features/authentication/Authentication.svelte";
import Notes from "./features/notes/Notes.svelte";
import Read from "./features/notes/components/Read.svelte";
import Create from "./features/notes/components/Create.svelte";
import Folders from "./features/folders/Folders.svelte";
//i want to do if(!$loading && path="/") below
$: if(!$loading) {
if($user) navigate("/folders");
else navigate("/authenticate");
}
</script>
{#if $loading}
loading..
{/if}
<Router>
{#if $user}
<Route path="/notes/read/:id" let:params>
<Read id={params.id} />
</Route>
<Route path="/notes/create" component={Create} />
<Route path="/notes" component={Notes} />
<Route path="/folders" component={Folders} />
{:else}
<Route path="/authenticate" component={Authentication} />
{/if}
</Router>
我尝试使用 useLocation 来获取当前路径。不幸的是,由于 App.svelte 不是不起作用的路由器的子级,并且该函数返回未定义。
从1.4.0开始,
svelte-routing
已经将当前位置导出到脚本中,所以你所要做的就是有一个导出语句。
<script>
// ...
//i want to do if(!$loading && path="/") below
export let location;
// then here you can parse the location
// and find the first '/' to determine what pathname you are in.
$: if(!$loading) {
if($user) navigate("/folders");
else navigate("/authenticate");
}
</script>
这是链接的问题:https://github.com/EmilTholin/svelte-routing/issues/62
我发现使用 window.location.pathname 是这种情况下最直观的解决方案!
const path = window.location.pathname;
$: if (!$loading && path == "/") {
if ($user) navigate("/folders");
else navigate("/authenticate");
}
给定的解决方案不会根据配置更新导航。但使用
afterNavigate
模块对我有用。
<script lang=ts>
let currentRoute = '';
afterNavigate((navigation) => {
currentRoute = navigation.to?.url.pathname as string;
console.log('Navigated to:', currentRoute);
});
</script>