如何在 sveltekit 应用程序中将菜单项设置为活动状态

2024-04-23

我一直在开发 sveltekit 应用程序,最近我的主导航菜单遇到了问题。当加载或刷新应用程序时,与当前 URL 对应的当前菜单项不会设置为活动状态。 (即菜单项“Home”的 URL 为“/”)我很难在网上找到任何有用的东西来演示如何设置它,但我有一个可行的解决方案,并认为我会为其他人记录它。目前很简单。

我有一个 nav.json 文件,我在其中定义应用程序中的任何菜单,从而可以轻松组织菜单。我将其导入到文件顶部并将其存储在数组中以供以后使用。

import menuObj from '../nav/nav.json';

let sidebar = menuObj.menus[0].items;

onMount()只是在加载导航组件时获取当前路径,并且只为我运行一次。

然后 - 使用<svelte:window on:click={handlePageClick}/>我们可以监听页面上的任何点击。

In the handlePageClick(e)方法我们传递 on:click 事件。使用该事件我们可以捕获当前pathname的网址。这使我们能够检查pathname反对我们的item.path这是在我使用导入和提取的 nav.json 文件中定义的#each我们的 html 中的方法。上<a>如果项目路由与当前路径匹配,我们可以将该类设置为活动状态。

这是完整的实现

<script>
    import menuObj from '../nav/nav.json';
    import {onMount} from "svelte";

    let path;
    let sidebar = menuObj.menus[0].items;

    onMount(() => {
        path = window.location.pathname;
    })

    function handlePageClick(e) {
        path = e.view.location.pathname;
    }

</script>

<svelte:window on:click={handlePageClick}/>
<nav class="sidebar">
    {#each sidebar as item, i}
        <a href={item.route} id="sidebar-menu-item-{item.id}" 
           class={path === item.route ? "item active" : "item"}
        >
            <i id="sidebar-menu-item-{item.id}-i" class="{item.icon}"></i>
        </a>
    {/each}
</nav>

我还没有发现这有什么缺点。如果我发现任何东西,我会更新这个问题。


这不是一个真正的问题,但无论如何我都会添加一个答案,因为你的方法不是必需的,SvelteKit 已经有一个内置系统:

<script>
 import { page } from '$app/stores';
</script>

<a href={item.route} class="item" class:active={$page.url.pathname == item.route}>
 ...
</a>

page是一个类似商店的对象,其中包含当前路径,它将自动更新为新路径

作为奖励:

类别:活跃是一个简单的简写,删除那里的三元表达式。

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

如何在 sveltekit 应用程序中将菜单项设置为活动状态 的相关文章

  • 进行 URL 重写

    当我点击网站上给定条目的评论部分时 URL 如下所示 http www com comments index php submission Portugal 20Crushes 20North 20Korea submissionid 62
  • 如何通过 JavaScript 设置输入值?

    我有 id txt1 的输入字段 但我无法从 JavaScript 更改该值
  • 将 CSS 导入 HTML 不起作用

    我正在尝试将 CSS 文件 import 导入 HTML 但它不起作用 我确实尝试过链接路径 但它也不起作用 但这种格式似乎工作为 http U5 L ttJS http 127 0 0 1 54149 assets pages U5 JS
  • 一键切换两个复选框,无需js

    有没有办法切换两个combined一键点击复选框 我有一个小日历 我想用复选框选择几周 一周可以是两个月 所以同一周我有两个复选框 我怎样才能安全地将它们结合起来 我正在使用这个抽象 HTML
  • 如何将Javascript代码转换为Jquery代码?

    请帮助我 这是Javascript代码 我需要将此代码更改为Jquery eval parent document forms 0 strKey intDimensionId value strIds intDimensionId 高性能
  • IE 抛出 JavaScript TypeError 但在 chrome 上不抛出

    描述在我们的 Magento 购物车上 当用户单击添加到购物篮在任何 Internet Explorer 浏览器的 产品详细信息 页面上单击按钮 浏览器中都会弹出一个包含以下错误消息的窗口 异常 类型错误 无法获取未定义或空引用的属性 ta
  • Protractor:如何从字符串中删除多余的空格,就像我们在 java getText.trim() 中使用的那样

    如何从字符串中删除多余的空格 就像我们在中使用的那样java getText trim in 量角器 我这样使用 var columnvalue rows get 9 getText var columnvalue1 columnvalue
  • jQuery - 如何确定哪个链接被点击

    我有一个简单的 PHP 代码 可以生成n以下代码的副本 p class center Click Here to See Data p div class divSDB L2 div 它是使用 PHP 生成的 因此副本的数量预先未知 在另一
  • 淡化背景但不淡化文本

    我已经对 div 应用了 CSS 淡入 淡出解决方案 在很大程度上我对此感到满意 但是我只想将其应用于背景 而不是文本 我需要文本始终完全不透明 参见示例 http jsfiddle net howiepaul gUAPV 33 http
  • 解码URIComponent抛出错误“URI格式错误”

    As unescape已被弃用 我已选择decodeURIComponent 但它没有按预期工作 decodeURIComponent无法解码以下 URI 组件 Coast 20Guard 20Academy 20to 20hold 20a
  • 如何从 Selectize 中删除项目?

    有什么方法可以从 Selectize 中删除项目吗 这是我的示例列表 AMNT QTY NA 当我经过时NA它应该删除特定项目 fn removeSelectorValue function value var selectize this
  • 如何按高度对 DIV 进行排序?

    我有三个divs 我想按高度从最大到最小对它们进行排序 div smallest div div largest div div middle div 任何想法 这很简单 使用 sort http www wrichards com blo
  • 需要帮助在 D3.js 条形图中将 x 轴刻度与条形对齐

    我有一个可用的线性条形图D3 js http d3js org 它也有基于时间的 x 轴 条形图绑定到计数属性 而轴绑定到日期属性 轴上的刻度未与条形对齐 知道如何将它们两者排列起来吗 这是 jsFiddle http jsfiddle n
  • Javascript `new` 运算符和原型

    假设我们创建一个名为 Shape 的函数 并在其原型上添加属性 name 和方法 toString var Shape function Shape prototype name Shape Shape prototype toString
  • 如何在闪亮的仪表板侧栏中手动展开子菜单

    我正在尝试手动展开闪亮仪表板侧边栏中的子菜单 这updateTabItems该功能仅适用于普通菜单 不适用于嵌套菜单 这是基本示例 修改自updateTabItems文档 来显示问题 如果我单击 切换选项卡 它会切换菜单 但不会展开具有子菜
  • 双向数据绑定(Angular)与单向数据流(React/Flux)

    上周 我一直在试图弄清楚如何双向数据绑定 Angular https docs angularjs org guide databinding and 单向数据流 React Flux https youtu be i 969noyAM是不
  • 脚本内的角度范围

    我们可以使用脚本标记内范围中定义的角度变量 如下所示 HTML 代码 div div JS CODE function AngularCtrl scope scope user name John 我只是得到 scope 未定义 有人可以帮
  • 在多个 html 文件上运行 javascript

    我有一个包含 1000 个 html 文件的文件夹 我必须使用 xpath 从每个 html 中删除某些节点 所以我已经制作了javascript 我无法打开每个文件并通过 Firefox 控制台运行 javascript 我用的是linu
  • 如何使用ajax从服务器接收返回的数据?

    基本上我有一个带有用户名文本框和提交按钮的表单 现在我想要的是 当用户在文本框中输入文本时 它应该获取文本框值并将用户名发送到服务器 以便服务器可以检查该用户名是否被任何其他用户占用 我可以将文本值发送到服务器 但我不知道如何接收回一些数据
  • 未捕获的类型错误:未定义不是 indexOf 上的函数

    我目前有此代码来检查特定 ID 的网站 URL GET 选项 但每当运行此代码时 我都会收到一个奇怪的错误 Uncaught TypeError Undefined is not a function 这是我的代码 如果我能得到关于这个问题

随机推荐

  • 一次绘制一个图形而不关闭旧图形(matplotlib)

    有没有一种方法可以一次绘制一组图形 而不关闭前一个图形 保持对 UI 的控制 并在最后保持图形打开 也许使用更合适的后端 或者使用 OO 风格而不是下面使用的 pyplot pylab 风格来编写它 例如我知道我能做到 plt ioff f
  • 为 Mac OS X 10.6.8 安装 Pygame

    使用Python 2 7 2 当我尝试导入 pygame 时 收到此错误消息 Traceback most recent call last File
  • bigquery 中的条件连接

    我有两张桌子 表 1 是单列整数 表 2 有三列 start integer end integer data 简单的查询是将整数列与数据连接起来 其中 integer gt start integer AND integer lt end
  • “更改材料轮廓颜色”按钮不起作用

    我想更改活动切换按钮的颜色 但仅仅改变rippleColor 就会产生影响 我希望自定义活动按钮的背景颜色和文本颜色 在下面的toggleButtonGroup中 我使用了上面的这种样式
  • 使用 .NET 4.5.2 从 C# 代码更改键盘布局

    我正在为 SDL Trados Studio 插件编写代码 插件的最后一部分需要一些 API 根本没有公开的自动化 所以我所拥有的 坚持一些东西 就是自动化默认的键盘快捷键 我的代码非常适合英语键盘布局 还有匈牙利语 但它当然不适用于希腊语
  • 如何从同一台机器上运行的 Docker 加载主机中运行的 MongoDB 中的数据?

    我正在 Ubuntu 18 02 机器上通过以下命令运行 Pytorch docker 容器 Run Pytorch container image docker run it v home ubuntu Downloads docker
  • xcode 5 无法看到旧 iOS 项目中的 NSLog(s)

    我有一个旧的iOS6我去年玩过的应用程序 它只适合我的妻子 所以我从未发布过它 但我想掸掉它 看看它是否对其他人有用 所以我把它加载到XCode5 5 0 2 在 10 8 4 上运行 我也在我的家用笔记本电脑上尝试过这个 运行相同的XCo
  • 如何在 Xamarin Forms 中的其他项目之上显示 ListView?

    I have a ListView that displays recent Search items I have added it in the Stack Layout of my Main page I want to show L
  • HTML 输入文件按用户选择顺序进行多重排序

    如果用户选择多个文件 则需要按用户选择优先级排序 如facebook FileList 需要取决于用户顺序 这是示例代码 function handleFileSelect evt var files evt target files Fi
  • gestureRecognizer:shouldReceive Touch:没有被调用

    gestureRecognizer shouldReceive Touch 方法未被调用 是我设置不当吗 id init UILongPressGestureRecognizer touchHold UILongPressGestureRe
  • ContinueWith() 内的函数不起作用

    public void Login string email emailInputField text string password passwordInputField text auth SignInWithEmailAndPassw
  • 寻找短语共现矩阵的有效算法

    我有一个包含大约 40 000 个短语的列表 L 和一个包含大约 1000 万个单词的文档 我想检查的是哪一对短语同时出现在 4 个单词的窗口内 例如 考虑 L 棕色狐狸 懒狗 该文件包含 一只敏捷的棕色狐狸跳过懒狗 的字样 我想看看 棕色
  • 获取表的某些列只有空值

    我需要知道一张表的哪些列只有空值 我知道我应该在 user tab columns 中执行循环 但是如何仅检测具有空值的列呢 感谢并抱歉我的英语 要在事先不知道列标识的情况下执行查询 需要使用动态 SQL 假设您已经知道该表不为空 您可以执
  • 如何为静态变量分配内存?

    在下面的程序中 class Main static string staticVariable Static Variable string instanceVariable Instance Variable public Main Th
  • Micro USB 音频 - Android 开放配件

    好的 我正在从事一个处于研究阶段的独立项目 我浏览了互联网 没有发现关于这个话题的任何好东西 我发现的网站在编程社区中与 StackOverflow 一样各自独立 使用 Android 2 3 4 Gingerbread 中包含的 Andr
  • 固定表格标题与水平和垂直滚动主体

    目标 表头和表体的列宽应相同 表格标题固定在垂直滚动条上 要在水平滚动上移动的表标题 标头显示在 HTML 的可滚动部分内 问题陈述 表格标题在垂直滚动时未固定 标题显示在 HTML 的可滚动部分之外 当标题位置固定时 我看过很多帖子 但找
  • 带有图像和分隔符的完全对齐的水平菜单

    I would like to achieve this fully justified horizontal menu 对齐是通过 Flexbox 完成的并且有效 但是我也无法使分隔的中点对齐 它们是通过伪类使用 css content
  • 解决 SML/NJ 编译管理器中的库冲突

    我正在使用 SML NJ 110 79 其中包括对 Successor ML 项目定义的新结构的支持 其中 Fn https github com SMLFamily BasisLibrary wiki 2015 005 Addition
  • 如何访问小部件的属性

    我是 Yii 框架的新手 我正在尝试访问小部件的属性 比如说 CMenu 我想更改一些公共属性的值 如 activeCssClass firstItemCssClass lastItemCssClass htmlOptions 等 那么你怎
  • 如何在 sveltekit 应用程序中将菜单项设置为活动状态

    我一直在开发 sveltekit 应用程序 最近我的主导航菜单遇到了问题 当加载或刷新应用程序时 与当前 URL 对应的当前菜单项不会设置为活动状态 即菜单项 Home 的 URL 为 我很难在网上找到任何有用的东西来演示如何设置它 但我有