【发布时间】:2017-12-02 16:41:28
【问题描述】:
我有一个名为 abc.js 的 JavaScript 文件,它有一个名为 xyz() 的“公共”函数。我想在我的 Angular 项目中调用该函数。我该怎么做?
【问题讨论】:
标签: javascript angular
我有一个名为 abc.js 的 JavaScript 文件,它有一个名为 xyz() 的“公共”函数。我想在我的 Angular 项目中调用该函数。我该怎么做?
【问题讨论】:
标签: javascript angular
你可以
import * as abc from './abc';
abc.xyz();
或
import { xyz } from './abc';
xyz()
【讨论】:
为了包含一个全局库,例如 angular-cli.json 的脚本数组中的 jquery.js 文件(使用 Angular 6+ 时为 angular.json):
"scripts": [
"../node_modules/jquery/dist/jquery.js"
]
在此之后,如果 ng serve 已经启动,则重新启动它。
【讨论】:
declare var $: any;
请参阅angular-cli.json(使用 Angular 6+ 时为angular.json)文件中的脚本。
"scripts": [
"../path"
];
然后添加typings.d.ts(如果该文件尚不存在,则在src中创建此文件)
declare var variableName:any;
将其导入到您的文件中
import * as variable from 'variableName';
【讨论】:
plunker来复制
在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>
它对我有用...
【讨论】:
declare does -- 本质上是“declare 用于告诉 TypeScript 该变量已在别处创建”(来自this answer)。
我通过在 tsconfig.json 文件的“compilerOptions”中添加"allowJs": true 解决了这个问题!
【讨论】: