raj*_*bzz 11 javascript typescript webpack angular2-services angular
使用Javascript Infovis Toolkit作为绘制图形和树木的外部库.我需要操作节点的onClick方法,以便异步地向服务器发送HTTP GET请求,并将来自服务器的数据分配给Angular服务类的属性和变量.通过使用webpack将所有已编译的类型脚本打包到单个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
});
}
});Run Code Online (Sandbox Code Playgroud)
但是,此解决方案不起作用,因为在Javascript Infovis Toolkit中,节点是在完成DOM渲染之后以及window.onload事件之后绘制的.这个库有一些生命周期方法,比如onAfterCompute(),它在绘图树完成后调用.如何触发全局事件以通知Angular服务树的绘制已完成并且它可以查询所有节点?
Gün*_*uer 26
只需使用dispatchEvent触发自定义事件.
在Angular中,您可以通过添加到实际添加到DOM的任何组件来监听:
<div (window:custom-event)="updateNodes($event)">
Run Code Online (Sandbox Code Playgroud)
@HostListener('window:custom-event', ['$event'])
updateNodes(event) {
...
}
Run Code Online (Sandbox Code Playgroud)
@Component()或@Directive()注释中:@Component({
selector: '...',
host: {'(window:custom-event)':'updateNodes($event)'}
})
Run Code Online (Sandbox Code Playgroud)
custom-event调度事件的类型在哪里,并且updateNodes(event)是组件类中的方法.
要在JavaScript中手动触发它:
window.dispatchEvent(new Event('custom-event'));
Run Code Online (Sandbox Code Playgroud)
另一种方法
将Angular之外的组件(或指令,服务)方法提供,如Angular2中所述 - 如何从应用程序外部调用组件函数.
| 归档时间: |
|
| 查看次数: |
10217 次 |
| 最近记录: |