【问题标题】:How to add external jQuery plugin to Angular project如何将外部 jQuery 插件添加到 Angular 项目
【发布时间】:2018-08-28 15:06:13
【问题描述】:

我有一个关于 Angular (v4) 和外部 jQuery 插件的问题。我之前使用过这个 jQuery 插件,但使用的是 asp.net 而不是 Angular。我的 jQuery 插件由 3 个元素组成:

  • 包含插件文件(css、js 文件)的文件夹
  • 我需要在页面上添加的 Div 元素 (<div id="mapsvg"></div>)
  • 需要在页面上添加并在页面加载时调用的 jQuery 函数 ($('#mapsvg').mapSvg({source: '/maps/usa.svg'});)

我正在使用来自该站点的 jQuery 插件:http://mapsvg.com/documentation/jquery/

我的问题是如何将这个插件添加到我的 Angular 项目中?我试图在新的空白项目中这样做,但它不起作用。

此时我:

  1. 在 angular.json 中添加了对脚本的引用 -> "./src/assets/mapsvg/js/mapsvg.js"
  2. 在 app.component.ts 中声明变量 -> declare var $: any;
  3. 将 div 元素添加到 app.component.html 中

现在我在控制台中收到一条错误消息,提示找不到我的 usa.svg 文件 (404)。当我将 svg 文件移动到 src 文件夹时,它会显示在页面上,但所有插件功能都不起作用。

有人可以帮我完成这个实现吗?

【问题讨论】:

  • Angular 不使用 jQuery - 所以你也必须添加 jQuery。
  • 尝试查看您尝试使用的插件是否有 npm 包。在 Angular 应用上使用 jQuery 并不是一个好习惯

标签: jquery angular


【解决方案1】:

首先,您需要使用npm install jquery --save 安装JQuery,然后在您的.ts 文件中添加import * as $ from "jquery";

这将安装 jQuery 并使其可用。现在,无论您想要哪个插件,下载它的源文件,将这些文件保存在您的资产文件夹中,然后将该文件导入您的 index.html 因为,对您而言,您需要将此代码保存在您的index.html

<link href="assets/mapsvg.css" rel="stylesheet">
<script type="text/javascript" src="assets/jquery.js"></script>
<script type="text/javascript" src="assets/jquery.mousewheel.js"></script>
<script type="text/javascript" src="assets/mapsvg.min.js"></script>

现在添加这个 div 文件,你想在其中实现插件

<div id="mapsvg"></div>

最后,在组件的 ngOnInit() 中调用插件

$('#mapsvg').mapSvg({source: '"assets/mapsvg.svg"'}); 

这么多应该可以解决问题。如有任何疑问,请发表评论。

【讨论】:

  • 嗨,非常感谢。它现在正在工作!但我遇到了一个问题。其中一项功能是“弹出框”,当我添加它时它不起作用并且在我收到的控制台中:
  • 您在控制台收到了什么? @Sepcio
  • 下面我的帖子中的整个错误描述(对许多字符进行评论)。我收到错误:core.js:1673 错误类型错误:this.contentWrap.nanoScroller 不是函数。答案标记为已接受。
  • @sepcio 请为这个新问题添加一个单独的问题。因此,社区的其他成员也可以帮助您。请在 cmets 中发布新问题的链接。
  • 嗨,新问题的链接:stackoverflow.com/questions/52000120/…
【解决方案2】:

在 Angular 构建配置中添加依赖项。 假设应用程序是使用 angular-cli 搭建的,这里是 Angular 6.x 和更低版本的示例。

根据版本,有一个 angular / angular-cli 配置文件

Angular 6.x -> angular.json

Angular 2.x - 5.x .angular-cli.json(隐藏文件)

在这两个文件中都有一个scripts 部分,其中包含一个Array。 按照在HTML 中为&lt;script&gt; 标签添加的顺序添加外部依赖项。

然后最后添加 jQuery 的类型定义:

npm install @types/jquery

并在您的组件中使用它:

import * as $ from "jquery";

@Component({
  selector: 'app-mycomponent',
  templateUrl: './mycomponent.component.html',
  styleUrls: ['./mycomponent.component.scss']
})

ngOnInit() { 
    $('#mapsvg').mapSvg({source: '"assets/mapsvg.svg"'});
}

最后,可以从 ngOnInit 方法调用插件,或者每当 &lt;div id="mapsvg"&gt;&lt;/div&gt; 元素通过方法调用或有条件的 via*ngIf 出现时调用

【讨论】:

  • 我尝试了上述相同的方法,但仍然出现错误 ngOnInit() { $('#multi-select').multiDatesPicker(); }
  • @DeepakPatidar 你能提供错误信息吗?
  • ERROR TypeError: $(...).multiDatesPicker is not a function
  • 似乎没有导入 multiDatesPicker 的依赖项
  • 我已经添加了他们对 angualr.json 脚本标签的依赖,
猜你喜欢
  • 1970-01-01
  • 2020-03-31
  • 1970-01-01
  • 1970-01-01
  • 2011-07-18
  • 1970-01-01
  • 2018-12-17
  • 2016-03-04
  • 2016-10-17
相关资源
最近更新 更多