javascript - 我可以在 JavaScript 中全局使用导入的函数和类吗?
问题描述
我想从 html 头文件中的所有类切换到模块方法。
我想在按钮和其他元素上使用一些方法和功能。
在我的 head 部分的 index.html 中:
<script src="js/main.js" type="module" defer></script>
在 main.js 中:
import {writeAlert} from './test.js';
在 test.js 中:
export function writeAlert () {
alert('I am an alert');
}
在 index.html 的 body 元素内
<button onlick="writeAlert()">Alert</button>
我收到未定义函数(或在其他情况下为类)的错误消息。那么实现全局使用导入函数的方法是什么呢?客户真的可以用这种方法看到我的整个源代码吗?
解决方案
在模块中导入的标识符在外部是不可见的。
两种解决方案,按个人喜好排序:
- 将回调安装从 HTML 移动到 JS:
- 将按钮定义更改为:
<button id="alertButton">Alert</button>
- 将以下代码添加到
main.js
或导入的另一个模块writeAlert
:
document.addEventListener("DOMContentLoaded", () => { document.getElementById("alertButton").onclick = writeAlert; });
- 将按钮定义更改为:
- “导出”
writeAlert
到window
模块之一:
通过这种方式,import { writeAlert } from "./test.js"; window.writeAlert = writeAlert;
writeAlert
可以在您的代码、HTML 或 JS 中的任何位置访问,而无需任何导入。但这首先违背了使用导入的目的,并且不那么优雅。
推荐阅读
- flutter - 如何预加载 Image.network
- python - 计算时间序列中的最高连续值
- vba - 在 Access VBA 中,是否可以将子表单源对象设置为查询但没有查询。作为前缀?
- python - Keras ImageDataGenerator.flow_from_directory 返回 TypeError
- typescript - 你如何在 Jasmine 中测试一个 Typescript 函数?
- python - Pyplot 错误栏无法传递颜色数组
- database - 无法清楚地了解 oracle 中的 intersect
- python - 为什么 FreezeGun 不能使用 SQLAlchemy 默认值?
- sql-server - 为存储过程限制对 SQL Server 的授权 - 仅调用
- appium - 在 appium 医生中出现意外的令牌错误