【问题标题】:angular2: including thirdparty js scripts in component [duplicate]angular2:在组件中包含第三方 js 脚本
【发布时间】:2016-06-04 21:20:12
【问题描述】:

有没有办法在 Angular2 组件中包含第三方 JS 脚本而不是将其包含在 index.html 中?

我有一个包装 dataTables 的表格组件。它是唯一需要 dataTables js/css 包含的组件。如果我能让我的 index.html 保持清洁,那就太好了。组件装饰器允许您指定 css 文件。

我尝试在组件 html 中移动脚本标签,但这似乎不起作用。

【问题讨论】:

标签: javascript angular


【解决方案1】:

组件模板中的脚本标签被移除。一种解决方法是在ngAfterViewInit()中动态创建脚本标签

另见https://github.com/angular/angular/issues/4903

import { DOCUMENT } from '@angular/common';
...

constructor(private @Inject(DOCUMENT) document, 
            private elementRef:ElementRef) {};

ngAfterViewInit() {
  var s = this.document.createElement("script");
  s.type = "text/javascript";
  s.src = "http://somedomain.com/somescript";
  this.elementRef.nativeElement.appendChild(s);
}

另见https://stackoverflow.com/a/9413803/217408

【讨论】:

  • 这似乎不能正常工作 角度抛出错误this.elementRef.nativeElement.append is not a function ?为什么?
  • @PardeepJain 我猜正确的函数名称是 JS/TS 中的 appendChild(s)。在 Dart 中是 append(s),我把它弄混了。
  • 我通过:document.getElementById 获得了一个参考。脚本加载,但需要这些脚本的 js 代码在初始加载时无法正确执行(刷新后它可以工作)。真的,即使它有效,我也不认为这将是一个解决方案。我的问题是看看是否有一种干净/标准的“角度方式”来仅在需要它们的组件中包含 js 依赖项。
  • 不,目前只有解决方法。
  • 如果您使脚本源依赖于用户输入,那么您当然会为 XSS 攻击打开一扇大门。如果字符串在应用程序源代码中是硬编码的,我看不出有问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-11-07
  • 2017-08-11
  • 2017-10-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-17
相关资源
最近更新 更多