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

2023-11-30

Using JavaScript Infovis 工具包作为绘制图形和树的外部库。我需要操作节点的 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
      
    });
  }

});

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


只需使用以下命令触发自定义事件调度事件.

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

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

where custom-event是调度事件的类型,updateNodes(event)是组件类中的一个方法。

要在 JavaScript 中手动触发它:

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

另一种方法

将是使组件(或指令、服务)的方法在 Angular 之外可用,如中所述Angular2 - 如何从应用程序外部调用组件函数.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Angular 2 - Typescript 函数与外部 js 库的通信 的相关文章

随机推荐

  • JVM 和 HotSpot 之间的区别?

    HotSpot 到底是什么 它与 JVM 和 OpenJDK 有何关系 这是图书馆吗 它到底有什么作用 另外 OpenJDK 和 HotSpot 有什么区别 Java 虚拟机的确切定义在Java虚拟机规范 JVM 根据定义是虚拟机 即模拟真
  • θ(n) 和 O(n) 有什么区别?

    有时我会看到 n 带有奇怪的 符号 中间有一些东西 有时只是 O n 这只是因为没有人知道如何输入这个符号而懒得打字 还是它有不同的含义 简短说明 如果算法的大小为 g n 则意味着随着 n 输入大小 变大 算法的运行时间与 g n 成正比
  • Kotlin RC NoClassDefFoundError

    将 kotlin 更新到 RC 1036 后 我面临一个奇怪的问题 我的代码甚至没有编译和打包 当构建通过并且应用程序启动时我得到ClassNotFoundException Didn t find class example myappl
  • 查看任务的活动堆栈

    我刚刚开始开发一个简单的 Android 应用程序 同时我仍在学习该平台 我正在使用带有 ADT 插件 0 9 6 的 Eclipse IDE 我需要知道是否可以查看Activity与任务关联的堆栈 有没有办法通过 DDMS 工具或任何其他
  • 从 UIAlertView 获取文本

    似乎缺少了一些东西 但是下面的代码正在生成nil两者的值title and title1 即使它正确启动正确的警报类型并且不指示任何警告或错误 这种实施可能存在什么问题UIAlertView UIAlertView alert UIAler
  • 使用 MOSS Web 服务的 SharePoint 文档的权限

    我们需要检索对文档具有读取权限的用户组 我们知道文档的 URL 以下权限服务提供具有访问权限的组 但它需要站点 URL 或列表 URL 我们有一个文档 URL 是否有任何其他服务提供文档的权限 或者 如果我们知道文档 URL 是否有办法找到
  • 仅使用标准 java api(缩进和 Doctype 定位)即可漂亮地打印 javax.xml.transform.Transformer 的输出

    使用以下简单代码 package test import java io import javax xml transform import javax xml transform stream public class TestOutpu
  • CSS 改变输入是否有值的样式

    我有一个带有占位符的输入元素 它应该始终出现 wrapper position relative input font size 14px height 40px placeholder position absolute font siz
  • Tkinter filedialog 破坏条目小部件

    tl dr 当应用程序调用时tkinter filedialog entry字段无法正确聚焦 长解释 初始化 tkinter 应用程序时 entry默认情况下启用字段 他们的状态是tk ENABLED 可以通过滚动字段来关注它们tab 最重
  • jcreator中如何设置jdk路径

    我已经安装了jdk 1 7 in C jdk1 7 0 directory and JCreator in C Program Files directory 我在JCreator中设置了正确的jdk路径 但是当我尝试在其中执行 java
  • 创建临时表前先检查临时表是否存在,如果存在则删除

    我使用以下代码来检查临时表是否存在 并在再次创建之前删除该表 如果存在 只要我不更改列 它就可以正常工作 如果我稍后添加一列 它将给出 无效列 的错误 请让我知道我做错了什么 IF OBJECT ID tempdb Results IS N
  • Delphi TCP连接透明代理

    有人知道用 Delphi 编写的 TCP 套接字代理应用程序的示例吗 我正在构建一个小型代理应用程序 它需要侦听给定 TCP 端口上的套接字连接 读取通过连接发送的 XML 数据包 通过 TCP 将请求发送到从可用后端服务器池中选择的服务器
  • Webstorm中的Jade语言注入

    我有一个 HTML 元素 我希望将其内容视为 Jade 稍后将其编译为纯 html Webstorm 显然无法识别这一点 因此它没有语法突出显示 如果我将 jade 添加为语言注入 它不会被列为可能的语言注入之一 然而 Jade 文件可以被
  • 使用 rownum 选择表的第二行

    我尝试过以下查询 select empno from select empno from emp order by sal desc where rownum 2 这不会返回任何记录 当我尝试这个查询时 select rownum empn
  • 无法读取未定义的属性“标题”,但显示标题

    我是 Angular 4 的新手 我正在尝试构建我的第一个应用程序 标题显示在屏幕上 但在console 这是 html 文件中的第 26 行 h1 result title h1 This is 旅行详情组件 export class T
  • 合并 Android 单元测试和连接测试代码覆盖率数据已损坏

    Android Gradle 插件 2 3 3 版本能够提供合并的单元测试和连接的测试代码覆盖率数据 在版本 3 0 0 中 此功能被破坏 因为每种测试类型都使用不同且不兼容的 JaCoCo 版本 拉斐尔 托莱多提供中等博客文章展示了如何在
  • 提交表单而不重新加载页面[重复]

    这个问题在这里已经有答案了 我有一个用 JavaScript 构建的函数 我想在表单提交被点击后执行该函数 它基本上完全改变了页面的外观 但我需要搜索框中的一个变量才能继续传递到 JavaScript 目前它会闪烁并重置那里的内容 因为它会
  • 使用 jodatime 查找剩余日期和时间

    我想使用 joda 时间进行比较 查找剩余天数和两天之间的时间 我正在使用两个像这样的 DateTime 对象 一个正在开始 另一个正在结束 DateTime endDate new DateTime 2011 12 25 0 0 0 0
  • React Redux mapDispatchToProps 与 this.props.dispatch

    到目前为止 我以这种方式使用容器和组件操作
  • Angular 2 - Typescript 函数与外部 js 库的通信

    Using JavaScript Infovis 工具包作为绘制图形和树的外部库 我需要操作节点的 onClick 方法 以便异步发送 HTTP GET 请求到服务器 并将来自服务器的数据分配给 Angular 服务类的属性和变量 通过使用