HTMX - 配置

HTMX 是一个 JavaScript 库,它使用 AJAXCSS TransitionsWebSockets服务器发送事件 来扩展您的 HTML。本指南将向您展示如何为您的项目配置 HTMX,涵盖基本和高级设置选项,以确保 HTMX 顺利为您工作。

HTMX 入门

HTMX 允许您以最小的努力为您的 Web 应用程序添加交互功能。首先将 HTMX 集成到您的项目中,并使用其属性使您的 HTML 元素具有响应性和动态性。

在您的项目中包含 HTMX

要开始使用 HTMX,您需要将其包含在您的 HTML 文件中。为此,您可以查看HTMX - 安装

验证 HTMX 激活

HTMX 在页面加载时自动开始工作。您无需执行任何操作即可进行设置。

全局配置

HTMX 提供允许您设置适用于页面上所有 HTMX 元素的全局配置选项。您可以使用 htmx.config 对象设置全局配置。

// 启用模板片段
htmx.config.useTemplateFragments = true;

// 设置默认交换样式
htmx.config.defaultSwapStyle = "outerHTML";

// 设置默认交换延迟(以毫秒为单位)
htmx.config.defaultSwapDelay = 100;

以下是一些常用的全局配置选项:

  • useTemplateFragments:如果设置为 true,HTMX 将使用模板标记来解析内容
  • defaultSwapStyle:设置所有元素的默认交换样式(例如"innerHTML"、"outerHTML")
  • defaultSwapDelay:设置交换内容前的默认延迟(以毫秒为单位)。
  • timeout:设置 AJAX 请求的默认超时(以毫秒为单位)。
  • historyCacheSize设置要缓存的历史记录条目数。

覆盖每个元素的配置

虽然全局配置适用于所有 HTMX 元素,您还可以使用属性配置单个元素。

以下是一些常用的元素特定属性

  • hx-trigger:指定触发请求的事件。
  • hx-target:指定要交换内容的目标元素
  • hx-swap:定义应如何交换响应内容
  • hx-boost:将普通锚点和表单转换为 AJAX 请求

示例

<button hx-post="/submit" hx-trigger="click" hx-target="#result" hx-swap="outerHTML">
    Submit
</button>

无论全局 defaultSwapStyle 设置如何,此按钮都将使用"outerHTML"交换。

高级配置选项

HTMX 还允许使用 JavaScript 进行更高级的配置。这些设置使您能够根据特定需求调整 HTMX。

示例

htmx.config.historyCacheSize = 20;
htmx.config.defaultSettleDelay = 100;
htmx.config.globalViewTransitions = true;
htmx.config.getCacheBusterParam = true;

此配置:

  • 增加历史缓存大小
  • 设置默认稳定延迟以实现更平滑的过渡
  • 全局启用视图转换 API
  • 向 GET 请求添加缓存清除参数

自定义标头配置

您可以向所有 HTMX 请求添加自定义标头。

htmx.config.headers = {
    'My-Custom-Header': 'my-custom-value'
};

调试配置

为了帮助调试,您可以记录当前配置。

console.log(JSON.stringify(htmx.config, null, 2));

这将以可读格式输出整个配置对象。

动态配置更改

您可以根据用户操作或应用程序状态动态更改配置。

document.getElementById('toggleHistory').addEventListener('click', function() {
    htmx.config.historyEnabled = !htmx.config.historyEnabled;
    console.log("History is now " + (htmx.config.historyEnabled ? "enabled" : "disabled"));
});

响应处理配置

HTMX 允许您控制如何在网页上处理服务器响应。您可以指定响应内容的去向和插入方式。

示例

<button hx-get="/api/data"
    hx-target="#result"
    hx-swap="innerHTML"
    hx-select="#data">
Load Data
</button>

单击此按钮时,将从"/api/data"获取数据,选择响应的"#data"部分,并通过替换其内部 HTML 将其插入"#result"元素中。

"hx-swap"属性还有其他选项,如"outerHTML"、"beforebegin"和"afterend",用于不同的插入方法。

配置 HTMX

您可以通过几种不同的方式配置 HTMX,方法是使用 JavaScript 或直接将属性添加到 HTML。以下是可用于设置 HTMX 以适合您的项目的不同配置选项的概述

配置变量 信息
htmx.config.historyEnabled 默认为 true,主要用于测试。
htmx.config.historyCacheSize 默认为 10。
htmx.config.refreshOnHistoryMiss 默认为 false。如果为 true,则如果缺少历史记录,HTMX 将刷新页面而不是使用 AJAX。
htmx.config.defaultSwapStyle 默认为 innerHTML。
htmx.config.defaultSwapDelay 默认为 0 毫秒。
htmx.config.defaultSettleDelay 默认为 20 毫秒。
htmx.config.includeIndicatorStyles 默认为 true,控制是否加载指示器样式。
htmx.config.indicatorClass 默认为 htmx-indicator。
htmx.config.requestClass 默认为 htmx-request。
htmx.config.addedClass 默认为 htmx-added。
htmx.config.settlingClass 默认为 htmx-settling。
htmx.config.swappingClass 默认为 htmx-swapping。
htmx.config.allowEval 默认为 true,可禁用某些功能的 eval。
htmx.config.allowScriptTags 默认为 true,确定 HTMX 是否处理新内容中的脚本标签。
htmx.config.inlineScriptNonce 默认为空,表示没有向内联脚本添加 nonce。
htmx.config.attributesToSettle 默认为 ["class", "style", "width", "height"],即在设置阶段要设置的属性。
htmx.config.inlineStyleNonce 默认为空,表示内联样式中不添加 nonce。
htmx.config.useTemplateFragments 默认为 false,使用 HTML 模板标记进行内容解析(与 IE11 不兼容)。
htmx.config.wsReconnectDelay 默认为 full-jitter。
htmx.config.wsBinaryType 默认为 blob,即通过 WebSocket 接收的二进制数据的类型。
htmx.config.disableSelector 默认为 [hx-disable]、[data-hx-disable],HTMX 会忽略具有此属性的元素。
htmx.config.withCredentials 默认为 false,使用凭据控制跨站点请求。
htmx.config.timeout 默认为 0 毫秒,请求自动取消之前的时间。
htmx.config.scrollBehavior 默认为平滑,滚动到顶部或表现为正常链接。
htmx.config.defaultFocusScroll 默认为 false,确定是否应将焦点元素滚动到视图中。
htmx.config.getCacheBusterParam 默认为 false,如果为 true,则将缓存清除参数附加到 GET 请求。
htmx.config.globalViewTransitions 默认为 false,如果为 true,则对新内容使用 View Transition API。
htmx.config.methodsThatUseUrlParams 默认为 ["get", "delete"],使用 URL 参数而不是请求正文的方法。
htmx.config.selfRequestsOnly 默认为true,仅允许对同一域的 AJAX 请求。
htmx.config.ignoreTitle 默认为 false,如果为 true,HTMX 将不会更新文档标题。
htmx.config.disableInheritance 禁用属性继承,可以通过 hx-inherit 属性覆盖。
htmx.config.scrollIntoViewOnBoost 默认为 true,将增强元素的目标滚动到视图中。
htmx.config.triggerSpecsCache 默认为 null,缓存已评估的触发器规范以提高性能。
htmx.config.responseHandling 配置 HTMX 如何处理不同的响应状态代码。
htmx.config.allowNestedOobSwaps 默认为 true,允许处理嵌套元素内的 OOB 交换。