【问题标题】:Including external javascript libraries inside Angularjs 2 component templates在 Angularjs 2 组件模板中包含外部 javascript 库
【发布时间】:2016-05-05 17:45:06
【问题描述】:

Angularjs 2 文档提到,

几乎所有的 HTML 语法都是有效的模板语法。

那么还有其他方法可以将外部 javascript 文件包含到组件模板中吗? (如图表插件、j3d 等)

我的问题详细..

我在 angular2 模板中有一些图表(比如 charts.html)。这些图表是一些交互式的。当用户在图表上移动指针时,它们会显示更多细节。 (基于 JQuery)。由于我动态地将图表注入 index.html(使用 angularjs),因此这些图表插件无法识别动态内容。 (甚至某些 css 属性也不适用于动态内容的类)。

【问题讨论】:

  • 我尝试在自己的 index.html 中包含所需的文件,但是在注入模板时它们不会动态触发。
  • 您在问题中引用的文档的链接是什么?只是为了了解上下文...谢谢!
  • 实际上脚本元素已显示在您的问题中;-) 刚刚编辑了这个。其实这个注解只针对组件模板,而不针对HTML入口点文件...所以外部JS文件必须包含在这个文件中。希望这是有道理的。

标签: angularjs angular angular2-template


【解决方案1】:

我不清楚你想做什么。您可以使用外部 javascript 文件,只需将它们包含到您的 HTML 页面中即可。然后你可以在你的组件中使用它们。

也就是说,您需要注意它们可能会在 Angular2 的上下文之外执行。我的意思是他们不会考虑变更检测。事实上,Angular2 使用 ZoneJS 来触发变化检测。这里有两个关于这方面的问题:

这是另一个描述如何在 Angular2 中使用 toastr 的问题:Unable to import toastr module with Angular 2

要考虑的另一件事是您的外部库是否支持模块或不能使用requireimport 引用它。

编辑

关于 CSS,组件支持 shadow DOM。这意味着他们的风格是孤立的。所以你需要在组件中定义CSS样式(styles属性)或者将encapsulation模式改为ViewEncapsulation.None

关于用户移动支持,你需要在你的组件中自己监听,并使用NgZone执行相应的处理,才能参与变化检测。你可以看看这个问题:

希望对你有帮助 蒂埃里

【讨论】:

  • 感谢您抽出宝贵时间帮助我。让我再解释一下我的问题。我在 angular2 模板中有一些图表(比如 charts.html)。这些图表是一些交互式的。当用户在图表上移动指针时,它们会显示更多细节。 (基于 JQuery)。由于我动态地将图表注入 index.html(使用 angularjs),因此这些图表插件无法识别动态内容。 (甚至某些 css 属性也不适用于动态内容的类)。
  • 关于 CSS,组件支持 shadow DOM。这意味着他们的风格是孤立的。所以需要在组件中定义CSS样式(styles属性)或者将封装方式改为ViewEncapsulation.None
  • 关于用户移动支持,你需要在你的组件中自己监听并使用NgZone执行相应的处理,才能参与变化检测。你可以看看这个问题:stackoverflow.com/questions/34808730/…
  • 希望能给你更多的提示。随时用您在 cmets 中提供给我的内容更新您的问题。
  • 大多数 javascript 库(具有绑定到 id 或类的内置侦听器)还不能正常工作。 :-(
猜你喜欢
  • 2015-08-05
  • 1970-01-01
  • 1970-01-01
  • 2017-01-06
  • 1970-01-01
  • 1970-01-01
  • 2014-04-15
  • 2018-10-26
相关资源
最近更新 更多