在 Angular 应用程序中使用外部 javaScript 库

IT技术 javascript angular
2021-03-05 04:29:27

我有一个角4应用和我有在一个JavaScript文件创建的JavaScript组件:timeline.jsjavascript 组件运行良好,但我想将它与 angular 4 一起使用。因此,我将我的 js 文件放在文件夹中assets/js/timeline.js

在文件中index.html,我用<script src="assets/js/timeline.js"></script>和 in调用我的 js 文件app.component.ts,我有:

var timeline = new Timeline("timelineVisualization")

因此,通常,时间线是在具有id="timelineVisualization".

但它不起作用,我有一个错误new Timeline:找不到名称时间轴。

那么,您知道如何从 调用 Timeline 构造函数timeline.js吗?

6个回答

你只需要做

 import * as Timeline from '../assets/js/timeline.js';

您还可以执行以下操作(在文件顶部):

declare var Timeline: any;

另请查看下面的良好做法。

如果我使用您建议的方法,是否仍需要按照@Srikkant Srinivasan 的答案中的建议在 .json 文件的“脚本”部分中包含库的路径?
2021-04-21 04:29:27
@MustafaKunwa 您是否阅读了下面的 Srikkant Srinivasan 的回答?事情可能是您还需要某种方式将脚本包含到您的页面中。
2021-04-21 04:29:27
是的,您需要一种从应用程序下载该脚本的方法。不好的方法是把它放到你的 index.html 中,好的方法是把它放到你的 package.json 中
2021-05-13 04:29:27
在运行时它说未定义
2021-05-16 04:29:27
好的,谢谢,它适用于 declare var Timeline: any;
2021-05-17 04:29:27

只是扩展@Deblaton Jean-Philippe上述答案,作为一般的良好做法,最好将您的 js 或其他 css 文件作为构建的一部分,而不是将它们放在您的 index.html 中。

如果您使用的是捆绑器,请使用类似的东西。

  "styles": [
    "styles.scss",
    //Other style files
  ],
  "scripts": [
    "../node_modules/jsplugin/dist/js/plugin.js",
    //Other script files
  ],

有 4 种方法可以在 Angular2+ 中添加外部 javaScript 库。例如:npm 中的 tinymce lib

1. 在 index.html 中添加 lib:

<script src="assets/tinymce.min.js"></script>

*.component.ts:

// tell TypeScript compiler that "tinymce" variable is declared somewhere in *.js
declare let tinymce: any;

2. 在 Angular.json 中添加 lib:

从 npm 安装 tinymce:

npm i tinymce

将 *.js 添加到 angular.json:

"scripts": ["node-modules/tinymce/tinymce.min.js"]

*.component.ts:

// tell TypeScript compiler that "tinymce" variable is declared somewhere in *.js
declare let tinymce: any;

3.在TypeScript中导入javaScript文件:

从 npm 安装 tinymce:

npm i tinymce

*.component.ts:

//tinymce: is a variable in 'tinymce.min.js' file => dont need "declare let tinymce"
import * as tinymce from 'tinymce/tinymce.min.js'; // "js" at the end is important

4.TypeScript方式(我喜欢):

https://www.typescriptlang.org/dt/search?search=tinymce 上搜索用于 tinymce 的 typeScript 标头 *.d.ts

然后安装:

   npm i @types/tinymce --save-dev

按照上面的第一种或第二种方式tinymce.min.js添加到 Angular。

*.component.ts:

// tinymce module at 'node-modules/@types/tinymce'
// 'node-modules/@types/tinymce'is just header, so it isn't compiled with angular
// don't need to use "declare let tinymce"
import * as tinymce from 'tinymce';

你可以跳转tinymce的功能。tinymce lib的代码很容易阅读

毕竟以上4种方式:

使用带有 javaScript 语法的 tinymce。例如tinymce lib中的指南:https : //www.tiny.cloud/docs/general-configuration-guide/use-tinymce-classic/#

进一步扩展上述答案

我们可以以不同的方式将库添加到项目中

  1. 在 HTML 中添加

    <html lang="en">
     <script src="https://nexplayer.nexplayersdk.com/latest/nexplayer.js"> 
     </script>
     <head>
     </head>
     <body>
       <app-root></app-root>
     </body>
    </html>
    
  2. 添加 angular.json 或 .angular-cli.json

    "scripts": [
        "../node_modules/jsplugin/dist/js/plugin.js",
         //Other script files
     ],
    
  3. 添加组件

    import * as Timeline from '../assets/js/timeline.js';
    

第二件事是声明库的名称

  1. 在组件中添加

     import { OnInit } from '@angular/core';
     declare var library: any;
    
  2. 在类型定义 (*.d.ts) 中。如果 src/typings.d.ts 不存在,则创建,否则,打开它,并将您的包添加到其中

    declare module 'your-library'
    
这在 Angular 9 中仍然有效吗?升级后,我们得到ERROR ReferenceError: [LIBRARY] is not defined
2021-04-27 04:29:27
你说的控制器是什么意思?
2021-04-29 04:29:27
这种方法对我不起作用。ERR“库名”未定义
2021-05-02 04:29:27
此方法适用于 angular 9。您的问题与将库文件添加到项目有关。
2021-05-07 04:29:27
对不起@穆罕默德。我的意思是组件
2021-05-13 04:29:27

试试这个:

declare const Timeline; 
指定类型不是更好,即使它只是any我认为Type Script 具有为事物分配类型的基本点......
2021-04-25 04:29:27