Angular4-在JavaScript文件中使用函数
我正在尝试将JavaScript文件加载到我的angular组件中。我已经从这里加载了完整的简化版本:并且将所有相关脚本放在我的脚本文件夹中 当代码运行并到达“loadImage”时,控制台将触发一个错误: 错误引用错误:未定义loadImage 解决这个问题的最佳方法是什么 组件Angular4-在JavaScript文件中使用函数,javascript,angular,import,referenceerror,Javascript,Angular,Import,Referenceerror,我正在尝试将JavaScript文件加载到我的angular组件中。我已经从这里加载了完整的简化版本:并且将所有相关脚本放在我的脚本文件夹中 当代码运行并到达“loadImage”时,控制台将触发一个错误: 错误引用错误:未定义loadImage 解决这个问题的最佳方法是什么 组件 import '../../../assets/scripts/load-image.all.min.js'; declare var loadImage: any; ... dropChangeHandler(
import '../../../assets/scripts/load-image.all.min.js';
declare var loadImage: any;
...
dropChangeHandler(e) {
e.preventDefault()
e = e.originalEvent
var target = e.dataTransfer || e.target
var file = target && target.files && target.files[0]
var options = {
maxWidth: 1000,
maxHeight: 1000,
canvas: true,
pixelRatio: window.devicePixelRatio,
// downsamplingRatio: 0.5,
orientation: true
}
if (!file) {
return
} else {
this.currentFile = file;
if (!loadImage(file, this.updateResults, options)) {
}
}
}
我认为这个问题与其他“将JS文件导入angular”问题略有不同,因为我觉得这可能与我试图导入的库有关。但是,我对此不确定,正在寻求建议。我认为您需要在导入的文件中导出所需的函数。您必须确保库将被编译 在angular cli.json中添加脚本
"scripts": [
....
'<path to file>/assets/scripts/load-image.all.min.js'
....
]
您尝试导入的库不支持es6模块。由于库中没有导出,因此在导入后它不会将任何变量添加到范围中 在您的特定情况下,最简单的方法是将脚本添加到index.html:
并使用
window.loadImage(文件,this.updateResult,选项)
我使用window
,因为库直接将自身绑定到window.object
更多详细信息
- 要在typescript中使用javascript模块,请将
添加到allowJs:true
文件tsconfig.js
被称为仅用于副作用的导入,不更改模块的范围,但可以访问全局应用范围。如果您想扩展已经导入的模块,它可以帮助您import./file
- 您可以通过不同的方式导入js模块:
- 对于CommonJs模块,可以使用“/modulePath.js”中的
import*作为ModuleName在component.ts文件中编写>并调用为
ModuleName.exportedMethod()
- 到角度管道,以确保其加载了
进口它。如果您使用的是angular cli,只需将其包括在内即可
apps/scripts部分中的angular-cli.json:
{ "apps": ... "scripts": [ "assets/scripts/load-image.all.min.js" ] }
- 如果不使用angular cli,可以在
中包括:index.html
- 对于CommonJs模块,可以使用“/modulePath.js”中的
--allowJs
添加到你的tsconf中。我刚刚意识到,您的库并没有使用任何值将loadImage函数直接导出和绑定到窗口对象。
{
"apps":
...
"scripts": [
"assets/scripts/load-image.all.min.js"
]
}