如何使用angular cli从angular2中的index.html调用外部js文件中的函数?

时间:2017-02-16 23:52:40

标签: angular angular-cli

我使用 angular2 angular cli 。在构建我的分发包时,我正在使用 http-server 测试为我构建的包。作为参考,我使用以下命令构建包:

ng build --prod --aot

加载构建的软件包后,我收到以下错误:

  

ReferenceError:未定义addToHomescreen

此函数位于我已包含在 angular-cli.json 配置文件中的外部js文件中:

"scripts": [
    "js/addtohomescreen.js"
],

(物理js文件位于 src / js / 目录内)

在index.html文件中,我使用以下代码调用 addtohomescreen()函数:

<script>addToHomescreen();</script>

我没有对外部js文件的任何引用,因为它被捆绑并且无法找到。至于外部js文件中的函数,它存在并且工作很精细,因为我之前在普通的html页面中使用过这个脚本。

我是一个相当新的角度,这是我的第一个包,以建立我可能会失踪的任何帮助将非常感激。感谢。

2 个答案:

答案 0 :(得分:1)

这是错误的做法。你永远不应该在你的html文件中包含任何内容。现在的问题是,脚本尚未加载,稍后将使用webpack加载它。

如果要调用此方法,则需要在角度应用程序中执行此操作。

因此,要解决此问题,您需要从 AppComponent 或其他任何方式调用您的函数。

但是再次你不能简单地调用它,因为它的打字稿所以你需要在 typings.d.ts 里面定义类型,它位于src文件夹中(如果不是只是创建它),如下所示: / p>

declare function addToHomescreen();

最后一个选项,如果您仍想在html中使用它,然后将脚本放到 assets 文件夹中(并且不包括在angular-cli中)。 将其包含在html中

  <script src="/assets/addtohomescreen.js"></script>

打电话给你。

答案 1 :(得分:0)

如果您使用的是模块和模块加载器,则可以在模块中定义功能,并将其导入到您需要的位置。无需包含脚本标记即可加载它。

addtohomescreen.ts

export function addToHomeScreen(){
    ...
}

main.ts

import { addToHomeScreen } from './addtohomescreen';

addToHomeScreen();