获取 svelte-routing 中的当前路径

问题描述 投票:0回答:3

我正在尝试访问当前路线,以便在当前路线为“/”时有条件地重定向访问者。我现在设置的方式是,如果您在地址栏中输入重定向,则任何路线都会发生重定向。我现在唯一的候选解决方案是创建一个保存当前路径的存储,并使用该存储设置仅当存储值为“/”时才导航的条件。但我想知道是否有更有效的方法来做到这一点?

这里是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 不是不起作用的路由器的子级,并且该函数返回未定义。

url-routing svelte
3个回答
0
投票

从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


0
投票

我发现使用 window.location.pathname 是这种情况下最直观的解决方案!

const path = window.location.pathname;
$: if (!$loading && path == "/") { 
  if ($user) navigate("/folders");
  else navigate("/authenticate");
}

0
投票

给定的解决方案不会根据配置更新导航。但使用

afterNavigate
模块对我有用。

<script lang=ts>    
let currentRoute = '';
  afterNavigate((navigation) => {
  currentRoute = navigation.to?.url.pathname as string;
  console.log('Navigated to:', currentRoute);
});
</script>
© www.soinside.com 2019 - 2024. All rights reserved.