如何在Angular 4中使用jQuery插件?

SP-*_*-TY 82 jquery angular

我想在角度项目中使用范围滑块,我尝试使用一个可用的角度4模块.

它在编译期间工作正常,但是当我尝试构建它以进行部署时,它会抛出以下错误.

在此输入图像描述

我检查了在角度项目中直接使用jQuery插件的选项,我只是在Angular 2中获得选项.

有没有什么办法可以在Angular 4中使用jQuery插件?

请告诉我.

提前致谢!

Erv*_*jku 191

用npm安装jquery

npm install jquery --save
Run Code Online (Sandbox Code Playgroud)

添加打字

npm install --save-dev @types/jquery
Run Code Online (Sandbox Code Playgroud)

将脚本添加到angular-cli.json

"apps": [{
  ...
  "scripts": [
    "../node_modules/jquery/dist/jquery.min.js",
  ],
  ...
}]
Run Code Online (Sandbox Code Playgroud)

建立项目和服务

ng build
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助!享受编码

  • @Norx指令包括安装类型,这意味着您不需要您的线路. (19认同)
  • 另外不要忘记`add declare var jquery:any; 声明var $:any;`到你的.ts文件. (11认同)
  • 我这样做时会出现构建错误.我有jquery 3.2.1安装了类型,所以它不会给我代码中的错误,但我仍然得到构建错误说:`找不到名字'$'` (5认同)

小智 155

是的,您可以在Angular 4中使用jquery

脚步:

1)index.html放在标签下面的行.

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>

2)在下面的组件ts文件中,你必须像这样声明var

import { Component } from '@angular/core';
declare var jquery:any;
declare var $ :any;

@Component({
  selector: 'app-root',
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.css']
})
export class AppComponent {
  title = 'angular 4 with jquery';
  toggleTitle(){
    $('.title').slideToggle(); //
  }

}
Run Code Online (Sandbox Code Playgroud)

并将此代码用于相应的html文件,如下所示:

<h1 class="title" style="display:none">
  {{title}}
</h1>
<button (click)="toggleTitle()"> clickhere</button>
Run Code Online (Sandbox Code Playgroud)

这对你有用.谢谢

  • @ Jota.Toledo你觉得应该怎么做?您是否有关于正确方法的其他信息? (4认同)
  • @ Jota.Toledo你的意思是将它添加到angular-cli.json?看起来真的很实用:)感谢您的建议 (3认同)

Gov*_*han 34

使用NPM Jquery NPM安装jQuery

npm install jquery
Run Code Online (Sandbox Code Playgroud)

安装jQuery声明文件

npm install -D @types/jquery
Run Code Online (Sandbox Code Playgroud)

在.ts中导入jQuery

import * as $ from 'jquery';
Run Code Online (Sandbox Code Playgroud)

在课堂内打电话

export class JqueryComponent implements OnInit {

constructor() {
}

ngOnInit() {
    $(window).click(function () {
        alert('ok');
        });
    }

}
Run Code Online (Sandbox Code Playgroud)


小智 27

在安装@ types/jquery时,不需要声明任何jQuery变量.

declare var jquery:any;   // not required
declare var $ :any;   // not required
Run Code Online (Sandbox Code Playgroud)

你应该可以在任何地方访问jQuery.

以下应该有效:

jQuery('.title').slideToggle();
Run Code Online (Sandbox Code Playgroud)


Phi*_*hil 11

你不应该在Angular中使用jQuery.尽管有可能(请参阅此问题的其他答案),但不鼓励这样做.为什么?

Angular在其内存中拥有自己的DOM表示,并且不使用document.getElementById(id)像jQuery 这样的查询选择器(类似函数).相反,所有DOM操作都由Renderer2完成(和Angular-directives一样,*ngFor和*ngIf在后台/框架代码中访问Renderer2).如果您自己使用jQuery操作DOM,您迟早会...

  1. 遇到同步问题,并且在屏幕上的正确时间出现错误或出现错误
  2. 在更复杂的组件中存在性能问题,因为Angular的内部DOM表示绑定到zone.js及其更改检测机制 - 因此手动更新DOM将始终阻止运行应用程序的线程.
  3. 还有其他令人困惑的错误,你不知道它的起源.
  4. 无法正确测试应用程序(Jasmine要求您知道元素何时被渲染)
  5. 无法使用Angular Universal或WebWorkers

如果你真的想要包含jQuery(用于捕捉一些你将100%最终扔掉的原型),我建议至少将它包含在你的package.json中,npm install --save jquery而不是从google的CDN中获取它.

TLDR:要学习如何以Angular方式操作DOM,请首先浏览官方游览英雄教程:https://angular.io/tutorial/toh-pt2如果需要访问DOM层次结构中较高的元素(父母或document body)或其他一些原因指令一样*ngIf,*ngFor定制指令,管道等角度实用工具,比如[style.background],[class.myOwnCustomClass] 不能满足您的需求,使用Renderer2:https://www.concretepage.com/angular-2/angular-4 -renderer2-示例

  • 在Angular中@Pradeep你通常不会从根html-tag开始在DOM中查找元素,尽管这也是可能的(通过在任何组件内部引用DOCUMENT或WINDOW).模块化(使用Angular)会强制您以仅操纵父元素的子元素的方式构建应用程序.从长远来看,这种分层依赖性使得代码的开发和维护变得更加容易.因此,您应该尝试仅操作当前组件的主机DOM元素或任何ViewChild或ContentChild及其子元素. (3认同)

Bet*_*hal 8

试试这个:

import * as $ from 'jquery/dist/jquery.min.js';
Run Code Online (Sandbox Code Playgroud)

或者向angular-cli.json添加脚本:

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

并在您的.ts文件中:

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