javascript - Angular 外部 js 库调用 Document.Ready
问题描述
在我的 .net core asp angular 应用程序中使用第 3 方 js 库。该库在 $(document).ready 方法中应用它的逻辑。所以我遇到了一个问题,因为 $(document).ready 方法没有触发,所以库没有正确应用于角度路径更改。
我在我的 angular-cli 脚本部分中引用了外部 js 库。
我打开了第 3 方 js 文件并向其添加了一个方法,该方法调用了他们在准备好的文档中调用的相同逻辑。我只是在努力寻找一种从我的角度打字稿组件中调用该方法的方法。
我创建了一个简单的缩减 js 文件来测试它并简化问题。我有以下 Tester.js,它在我的 -angular-cli.json 脚本标签下被引用:
(function ($) {
"use strict";
$(document).ready(function () {
CallMe();
});
function CallMe(){
console.log('HEY I GOT CALLED');
}
})(jQuery);
我希望能够从 ts 组件文件中调用 CallMe() 方法。CallMe() 在 document.ready 事件上按预期被触发一次,但我需要弄清楚如何从我的 ts 脚本中调用这个 ad hoc。
有任何想法吗?
解决方案
步骤1
检查外部库是否在npm上可用。如果是这样,您可能能够导入所需的功能,而不是更改供应商的文件。
例如,它可能提供这样的 API:
YourTsComponent.ts
const CallMe = require('library').CallMe
// or
import { CallMe } from 'library'
// on route change
CallMe()
如果有类似的东西可用,那就太好了,否则......
第2步
用全局确认你的理论(CallMe
临时附加到窗口)。如果您的理论是正确的,您应该能够通过在路由更改时调用此全局变量来获得所需的行为。
测试者.js
(function($) {
"use strict";
$(document).ready(function() {
CallMe();
});
function CallMe() {
console.log('HEY I GOT CALLED');
}
// TODO - remove (test only)
window._CallMe = CallMe
})(jQuery);
YourTsComponent.ts
// on route change
window._CallMe()
如果这不起作用,您必须重新评估您的理论。
但如果确实...
第 3 步
将供应商的库转换为您的应用可以使用的模块。您的里程可能会根据您使用的模块系统(如果有)而有所不同。例如,如果您使用 require.js:
测试者.js
(function(factory) {
if (typeof define === 'function' && define.amd) {
// AMD
define(['jquery'], factory);
} else if (typeof exports === 'object') {
// CommonJS
factory(require('jquery'));
} else {
// Browser globals
factory(jQuery);
}
}(function($) {
"use strict";
function CallMe() {
console.log('HEY I GOT CALLED');
}
$(document).ready(function() {
CallMe();
});
return CallMe
}));
YourTsComponent.ts
const CallMe = require('/path/to/tester.js')
// on route change
CallMe()
如果您不热衷于重写供应商库
您可以考虑覆盖.ready
的默认行为,以便可以重新触发它。如果您想走这条路,这里有一些答案,但请注意,覆盖默认 jQuery 行为可能比编辑单个供应商文件更容易出错。
推荐阅读
- python - 如何对具有零阶保持的分组数据帧进行重新采样?
- python - 为什么 __setattr__ 和 __delattr__ 在这种情况下会引发 AttributeError ?
- javascript - 如何在 Jest 中测试工厂功能
- react-native - 图片上传无法在图片位置显示
- html - 如何存储指向的“正文”样式表信息
我编写了一个 Web 服务器,某些用户只能通过未连接到 Internet 的本地 Intranet 访问该服务器。我正在服务的网页包含样式表“正文”信息,该信息定义了一个按钮,客户端单击该按钮以从服务器接收有关服务器正在监视的设备状况的特定信息或告诉该设备执行某些操作。按钮示例 I已经看到所
- ionic-framework - 使用 Capacitor 在浏览器中运行本机插件
- multi-tenant - Quarkus - 休眠反应式和多租户
- python - Python映射删除值而不是更改它们
- c# - 要成为 XML 可序列化的,从 IEnumerable 继承的类型必须在其继承的所有级别上都有 ADD(System.Object) 的实现
- flutter - webview_flutter 不适用于颤振 2(在颤振 2 前工作)