如何在Angular中包含JavaScript脚本文件并从该脚本中调用函数?


Answers:


104

请参考angular-cli.jsonangular.json使用angular 6+时)文件中的脚本。

"scripts": [
    "../path" 
 ];

然后添加typings.d.tssrc如果此文件尚不存在,则在其中创建)

declare var variableName:any;

将其导入为文件

import * as variable from 'variableName';

9
我在脚本中将路径添加为“脚本”:[“ ./assets/common_header_sidebar.js”]; 然后在type.d.ts中,我写了声明var commonHeader:any;。然后在我的ts文件中,我从'commonHeader'中将import *作为commonHeaderModule写了出来;但得到“找不到模块'commonHeader'”。错误
Piyush Jain

6
我可能会问这个听起来很傻。但是路径中的文件名(在angular-cli.json中声明)和typeing.d.ts文件中的对象名称声明之间是如何关联的。因为我要从声明的对象的名称而不是文件中导入文件
Piyush Jain

2
您可以创建一个plunker要复制的图片吗
Aravind

2
完成集成后,只是我不得不在使用该文件的ts文件中声明该函数,而无需导入。万分感谢 。
Piyush Jain

2
@Aravind如果我在Angular 4项目中没有type.d.ts文件怎么办?
哈比卜

33

为了包括全局库,例如jquery.js,脚本数组中的文件来自angular-cli.jsonangular.json当使用angular 6+时):

"scripts": [
  "../node_modules/jquery/dist/jquery.js"
]

此后,如果已经启动,请重新启动ng serve。


3
如何导入打字稿文件?
alansiqueira27 '18 -10-29

1
在TS文件采用进口-declare var $: any;
ojus库尔卡尼

3
在Angular的6+版本中,angular-cli.json文件已被angular.json重命名/替换。
ΕГИІИО

22

index.html中添加外部js文件。

<script src="./assets/vendors/myjs.js"></script>

这是myjs.js文件:

var myExtObject = (function() {

    return {
      func1: function() {
        alert('function 1 called');
      },
      func2: function() {
        alert('function 2 called');
      }
    }

})(myExtObject||{})


var webGlObject = (function() { 
    return { 
      init: function() { 
        alert('webGlObject initialized');
      } 
    } 
})(webGlObject||{})

然后声明它在如下组件中

demo.component.ts

declare var myExtObject: any;
declare var webGlObject: any;

constructor(){
    webGlObject.init();
}

callFunction1() {
    myExtObject.func1();
}

callFunction2() {
    myExtObject.func2();
}

demo.component.html

<div>
    <p>click below buttons for function call</p>
    <button (click)="callFunction1()">Call Function 1</button>
    <button (click)="callFunction2()">Call Function 2</button>
</div>

它为我工作...


非常详尽的示例,谢谢,它对我来说适用于角度6。其他答案均无效。
丹尼尔·菲利普

FWIW,这里是一些说明什么declare -基本上是“ declare被用来告诉打字稿该变量已在别处创建 ”(从这个答案)。
鲁芬

18

你可以

import * as abc from './abc';
abc.xyz();

要么

import { xyz } from './abc';
xyz()

26
当文件托管在某个地方但不在本地仓库中时,我该怎么办?
Piyush Jain

你知道了吗?
Luis Aceituno '18

两种方法都出错。好吧,我的项目中有一个.js文件,但是当我通过第一种方法导入时,它在编译时给我错误,并且在使用第二种方法时找不到任何模块。我只是使用光滑的滑块。
哈比卜
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.