2017-06-19 106 views
2

我有一个显示登录控制台的一个JScript:angular4如何调用一个函数在一个外部JS

x.js包含

function open() { 
    console.log('this a function'); 
} 

在我的应用程序

的index.html的
<script src="x.js"></script> 
在我的组件

declare var xJS : any;; 

@Component({ 
    selector: 'employerfile', 
    templateUrl: './employerfile.component.html' 
}) 

export class EmployerFileComponent 
    ..... 
    openURL() { 
     xJS.open(); 
    } 
} 

HTML

<a (click)="openURL()"> click </a> 

当我执行这个代码,我得到一个异常@

Original exception: xJS is not defined

我怎样才能把这个外部函数?

回答

1

导入您的文件中像这样<script src="x.js"></script>将无法​​正常工作。

你必须将其导入方式如下:

import * as xJS from './x.js'; 

如果无法工作,另一种方法是使用System.import

declare var System: any; 

System.import('./x.js') 
    .then(xJS => { 
     xJS.open(); 
    }); 

您可以查看以下SO post

+0

我有这个错误error_handler.js:50 EXCEPTION:未捕获(承诺):TypeError:xJS.open不是一个函数 – Florence

+1

你可以使你的外部文件作为一个模块,并导出你的函数:'export default function open() {...}' –

1

你应该先导入这样的:

import * as xJS from 'xJS'; 
+1

我有这样的编译错误 错误在C:/ ... app.component.ts (15,28):文件'C:/ .... js/x.js'不是一个模块。 – Florence

1

你必须声明你想在你的角度组件使用的函数的名称,AS-

declare var open: any; 

这基本上告诉open某处的编译器,它会在你js文件中找到,然后。

此外,使用上述方法在你的组件,你将不得不使用这个syntax-

anyCustomMethodName/anyLifeCycleMethod() { 
    new open(); 
} 
+0

如果你想存储open()函数的返回值,该怎么办? – Rich

相关问题