MDUI文档
复制 llms.txt 链接复制 llms-full.txt 链接以 Markdown 格式查看此页与 ChatGPT 讨论此页与 ChatGPT 讨论此项目文档
预设颜色
自选颜色
从壁纸提取颜色
请选择一张壁纸
开发指南
概述 安装 快速入门 TypeScript 支持 IDE 支持 本地化 常见问题
AI 辅助开发
样式
与框架集成
组件
函数
独立包

常见问题

以下整理了一些 mdui 社区常见的问题和官方答复,在提问之前建议找找有没有类似的问题。

使用自闭合标签为何无法显示组件?

mdui 是基于 Web Components 开发的组件库,Web Components 规范不支持自闭合标签,因此请确保为 mdui 组件添加结束标签。

<!-- 错误用法 -->
<mdui-text-field />

<!-- 正确用法 -->
<mdui-text-field></mdui-text-field>

如何在组件加载完成前隐藏组件?

由于 mdui 组件是通过 JavaScript 进行注册的,因此在 js 文件加载并注册组件之前,组件可能会暂时显示为无样式状态。以下两种方法可以解决这个问题:

一种方法是使用 CSS 的 :defined 伪类来隐藏未注册的 mdui 组件。以下 CSS 代码将隐藏所有未注册的 mdui 组件,并在组件注册完成后立即显示:

:not(:defined) {
  visibility: hidden;
}

另一种方法是使用 JavaScript 的 customElements.whenDefined() 方法。这个方法返回一个 promise,当指定的组件注册完成后,该 promise 将被 resolve。为了处理某些组件由于特殊原因无法加载的情况,你可以配合使用 Promise.allSettled() 方法。

以下示例首先通过 opacity: 0<body> 隐藏,然后在组件注册完成后,使页面淡入显示。同时,示例使用了 Promise.allSettled() 来等待所有 promise 完成,确保即使某个组件无法加载,页面也能正常显示:

<style>
  body {
    opacity: 0;
  }

  body.ready {
    opacity: 1;
    transition: 0.25s opacity;
  }
</style>

<script type="module">
  await Promise.allSettled([
    customElements.whenDefined('mdui-button'),
    customElements.whenDefined('mdui-card'),
    customElements.whenDefined('mdui-checkbox'),
  ]);

  // 现在 button, card, checkbox 组件已经注册完成,添加 ready class,使页面淡入显示
  document.body.classList.add('ready');
</script>
本页目录