如何在Angular 4中包含外部js文件并从angular到js调用函数

Piy*_*ain 101 javascript angular

假设我有一个名为abc.js具有功能的文件xyz().我想在我的Angular 4项目中调用该函数.我该怎么办?

Ara*_*ind 87

请参阅angular-cli.json文件中的脚本.

"scripts": [
    "../path" 
 ];
Run Code Online (Sandbox Code Playgroud)

然后加入 typings.d.ts

declare var variableName:any;
Run Code Online (Sandbox Code Playgroud)

将其作为文件导入您的文件中

import * as variable from 'variableName';
Run Code Online (Sandbox Code Playgroud)

  • 我在脚本中添加了"脚本"路径:["./assets/common_header_sidebar.js"]; 然后在打字.我写了声明var commonHeader:any; 然后在我的ts文件中,我从'commonHeader'中将import*写为commonHeaderModule; 但得到"找不到模块'commonHeader'." 错误 (8认同)
  • 我可能听起来很傻.但是路径中的文件名(在angular-cli.json中声明)和在typing.d.ts文件中声明对象名称的方式是如何相关的.因为我从声明的对象的名称导入而不是文件 (5认同)
  • 你可以创建一个'plunker`来重现 (2认同)
  • 完成集成只是我必须在我的ts文件中声明我正在使用它的函数并且不需要导入.万分感谢 . (2认同)
  • 我的项目中没有“typings.d.ts”文件,那么我该怎么办? (2认同)
  • @Aravind如果我在Angular 4项目中没有type.d.ts文件怎么办? (2认同)
  • 仅供参考 Angular-cli.json 已从 Angular 6+ 重命名为 Angular.json (2认同)
  • 尝试导入它时仍然出现错误:“找不到模块‘myVariableName’或其相应的类型声明。” (2认同)

Rah*_*ngh 26

为了包含一个全局库,例如来自angular-cli.json的脚本数组中的jquery.js文件:

"scripts": [
  "../node_modules/jquery/dist/jquery.js"
]
Run Code Online (Sandbox Code Playgroud)

在此之后,如果已经启动,则重新启动ng.

  • 你如何导入打字稿文件? (3认同)
  • 在 Angular 6+ 版本中,angular-cli.json 文件已被重命名/替换为 angular.json。 (3认同)
  • 在 ts 文件中导入使用 - `declare var $: any;` (2认同)
  • 这要么在 2021 年不起作用,要么缺少一个步骤 (2认同)

cra*_*ash 13

你也可以

import * as abc from './abc';
abc.xyz();
Run Code Online (Sandbox Code Playgroud)

要么

import { xyz } from './abc';
xyz()
Run Code Online (Sandbox Code Playgroud)

  • 当文件托管在某个地方而不是在本地仓库中时我该怎么办? (24认同)

小智 6

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

<script src="./assets/vendors/myjs.js"></script>
Run Code Online (Sandbox Code Playgroud)

这是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||{})
Run Code Online (Sandbox Code Playgroud)

然后声明它在如下组件中

demo.component.ts

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

constructor(){
    webGlObject.init();
}

callFunction1() {
    myExtObject.func1();
}

callFunction2() {
    myExtObject.func2();
}
Run Code Online (Sandbox Code Playgroud)

demo.component.html

<script src="./assets/vendors/myjs.js"></script>
Run Code Online (Sandbox Code Playgroud)

它为我工作...

  • 非常彻底的例子,谢谢,它在 Angular 6 上对我有用。其他答案都不起作用。 (2认同)
  • Fwiw,[这里有一些关于 `declare` 作用的解释](/sf/ask/2451399121/) -- 本质上“_`declare` 用于告诉 TypeScript 该变量已在其他地方创建_” (来自[这个答案](/sf/answers/2451422221/))。 (2认同)

Aak*_*ani 6

我通过在tsconfig.json"allowJs": true文件中添加“compilerOptions”解决了这个问题!