gpt4 book ai didi

javascript - Angular 2 - typescript 函数与外部 js 库的通信

转载 作者:可可西里 更新时间:2023-11-01 02:16:46 27 4
gpt4 key购买 nike

使用 Javascript Infovis Toolkit作为绘制图形和树的外部库。我需要操作节点的 onClick 方法,以便向服务器异步发送 HTTP GET 请求,并将来自服务器的数据分配给 Angular 服务类的属性和变量。通过使用 webpack 将所有已编译的 typescript 打包到一个 js 文件中,输出文件是困惑且不可读的。因此,从外部 js 库调用已编译 js 文件中的函数显然不是最佳解决方案。

我在我的 Angular 服务中尝试了以下解决方案,这样我就可以毫无问题地访问该服务的属性:

document.addEventListener('DOMContentLoaded', function () {

var nodes = document.querySelectorAll(".nodes"); // nodes = []

for (var i = 0; i < nodes.length; i++) { // nodes.length = 0

nodes[i].addEventListener("click", function () {

// asynchronously sending GET request to the server
// and assing receiving data to the properties of this Angular service

});
}

});

但是,此解决方案不起作用,因为在 Javascript Infovis Toolkit 中,节点是在完成 DOM 渲染之后以及 window.onload 事件之后绘制的。这个库有一些生命周期方法,比如 onAfterCompute() 在绘制树完成后调用。如何触发一个全局事件通知Angular服务树的绘制完成,可以查询所有的节点?

最佳答案

只需使用 dispatchEvent 触发自定义事件.

在 Angular 中,您可以通过添加到任何实际添加到 DOM 的组件来监听:

  • 在任何模板中:
<div (window:custom-event)="updateNodes($event)">
  • 或者在组件类中:
@HostListener('window:custom-event', ['$event']) 
updateNodes(event) {
...
}
  • 或在@Component()@Directive()注解中:
@Component({
selector: '...',
host: {'(window:custom-event)':'updateNodes($event)'}
})

其中 custom-event 是派发事件的类型,updateNodes(event) 是组件类中的方法。

在 JavaScript 中手动触发它:

window.dispatchEvent(new Event('custom-event'));

另一种方法

将使组件(或指令、服务)的方法在 Angular 外部可用,如 Angular2 - how to call component function from outside the app 中所述。 .

关于javascript - Angular 2 - typescript 函数与外部 js 库的通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36997625/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com