import { Component, AfterViewInit } from '@angular/core';
declare var $:any;
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.css']
})
export class AppComponent {
title = 'app works!';
ngAfterViewInit(){
$(document).ready(function(){
$("p").click(function(){
$(this).hide();
});
});
}
}
现在使用'ng serve'命令运行你的angular 2 app并测试它 . 它应该工作 .
114
这对我有用 .
第1步 - 首先要做的事情
// In the console
// First install jQuery
npm install --save jquery
// and jQuery Definition
npm install -D @types/jquery
第2步 - 进口
// Now, within any of the app files (ES2015 style)
import * as $ from 'jquery';
//
$('#elemId').width();
// OR
// CommonJS style - working with "require"
import $ = require('jquery')
//
$('#elemId').width();
// in Angular v2 it is OpaqueToken (I am on Angular v5)
import { InjectionToken } from '@angular/core';
export const JQUERY_TOKEN = new InjectionToken('jQuery');
21 回答
一个简单的方法:
1. include script
的index.html
2. declare
my.component.ts
3. use
Here is what worked for me - Angular 2 with webpack
我尝试将
$
声明为类型any
,但每当我尝试使用任何JQuery模块时(例如)$(..).datepicker()
都不是函数由于我的vendor.ts文件中包含Jquery,因此我只是将其导入到我的组件中
import * as $ from 'jquery';
我现在可以使用Jquery插件(如bootstrap-datetimepicker)
如果你使用angular-cli,你可以这样做:
npm install jquery --save
npm install @ types / jquery --save-dev
将“../node_modules/jquery/dist/jquery.min.js”添加到.angular-cli.json文件中的“script”部分
将“$”添加到tsconfig.app.json的“types”部分
你可以在official angular cli doc找到更多细节
我用更简单的方式做到了 - 首先在控制台中按npm安装jquery:
npm install jquery -S
然后在组件文件中我只写:let $ = require('.../jquery.min.js')
它可以正常工作!这里是我的一些代码的完整示例:在teplate我有例如:
EDIT
或者代替使用:
使用
并在你的index.html中:
这将初始化jquery只有一次全局 - 这对于在bootstrap中使用模态窗口很重要...
Global Library Installation as Official documentation here
npm install jquery --save
"scripts": [ "node_modules/jquery/dist/jquery.slim.js" ],
如果您正在运行它,请重新启动服务器,它应该在您的应用程序上运行 .
如果要在单个组件内使用,请在组件内使用 import $ from 'jquery';
为什么每个人都把它变成火箭科学?对于需要对静态元素执行一些基本操作的其他人,例如
body
标记,只需执行以下操作:在index.html中添加带有jquery lib路径的
script
标签,无论在哪里(这样你也可以使用IE条件标签为IE9加载较低版本的jquery等等) .在
export component
块中有一个调用代码的函数:$("body").addClass("done");
Normaly会导致声明错误,所以只需在此.ts文件中的所有导入之后添加declare var $:any;
就可以了!请按照这些简单的步骤 . 它对我有用 . 让我们从一个新的角度2应用程序开始,以避免任何混淆 . 我已经拥有它了 . https://cli.angular.io/
Step 1: Create a demo angular 2 app
你可以使用任何名字 . 现在通过在cmd下运行检查它是否正常工作 . (现在,如果不使用cd命令,请确保指向'jquery-demo')
你会看到“app works!”在浏览器上 .
Step 2: Install Bower (A package manager for the web)
在cli上运行此命令(如果不使用cd命令,请确保指向'jquery-demo'):
现在成功安装了凉亭后,使用以下命令创建'bower.json'文件:
它会询问输入,如果你想要默认值,只需按Enter键,最后输入“是”,当它询问“看起来不错?”时
现在,您可以在文件夹"jquery-demo"中看到一个新文件(bower.json) . 你可以在https://bower.io/找到更多信息
Step 3: Install jquery
运行此命令
它将创建一个包含jquery安装文件夹的新文件夹(bower_components) . 现在你在'bower_components'文件夹中安装了jquery .
Step 4: Add jquery location in 'angular-cli.json' file
打开'angular-cli.json'文件(存在于'jquery-demo'文件夹中)并在“脚本”中添加jquery位置 . 它看起来像这样:
Step 5: Write simple jquery code for testing
打开'app.component.html'文件并添加一个简单的代码行,该文件将如下所示:
现在打开'app.component.ts'文件并为'p'标签添加jquery变量声明和代码 . 你应该使用生命周期钩子ngAfterViewInit() . 进行更改后,文件将如下所示:
现在使用'ng serve'命令运行你的angular 2 app并测试它 . 它应该工作 .
这对我有用 .
第1步 - 首先要做的事情
第2步 - 进口
#UPDATE - 2017年2月
最近,我用
ES6
而不是typescript
编写代码,并且能够在import statement
中没有* as $
import
. 这就是现在的样子:祝好运 .
写吧
在所有导入部分之后,您可以使用jQuery并在index.html页面中包含jQuery库
它对我有用
第1步:使用命令:npm install jquery --save
第2步:您可以简单地导入角度为:
从'jquery'导入$;
就这样 .
一个例子是:
//安装jquery
npm install jquery --save
//为jquery
typings install dt~jquery --global --save
安装类型定义//将jquery库添加到指定的构建配置文件中(在“angular-cli-build.js”文件中)
//运行构建以在构建中添加jquery库
ng build
//添加相对路径配置(在system-config.js中)
/** Map relative paths to URLs. */ const map: any = { ....., ......., 'jquery': 'vendor/jquery/dist' };
//导入组件文件中的jquery库
下面是我的示例组件的代码snipppet
我找到的最有效的方法是在页面/组件构造函数中使用时间为0的setTimeout . 这让我们在Angular完成加载所有子组件之后的下一个执行周期中运行jQuery . 可以使用其他一些组件方法,但我在setTimeout内运行时尝试的效果最好 .
现在它变得非常简单了,你可以通过简单地在Angular2控制器中声明任何类型的jQuery变量来实现 .
在import语句之后和组件装饰器之前添加它 .
要访问具有id X或Class X的任何元素,您只需要这样做
由于我是个笨蛋,我认为有一些工作代码会很好 .
另外,Angular2打字版本angular-protractor has issues with the jQuery
$
,所以最受欢迎的答案并没有给我一个干净的编译 .以下是我要做的工作:
的index.html
在my.component.ts里面
您可以实现生命周期钩子 ngAfterViewInit() 来添加一些DOM操作
使用路由器时要小心,因为angular2可能会回收视图..所以你必须确保DOM元素操作只在afterViewInit的第一次调用中完成..(你可以使用静态布尔变量来做到这一点)
与ng1相比,使用Angular2中的jQuery是一件轻而易举的事 . 如果您使用的是TypeScript,则可以首先引用jQuery typescript定义 .
TypescriptDefinitions不是必需的,因为您可以使用
any
作为$
或jQuery
的类型在角度组件中,您应该使用
@ViewChild()
从模板引用DOM元素 . 在初始化视图之后,您可以使用此对象的nativeElement
属性并传递给jQuery .将
$
(或jQuery
)声明为JQueryStatic将为您提供jQuery的类型引用 .这个例子在plunker上可用:http://plnkr.co/edit/Nq9LnK?p=preview
tslint会抱怨
chosen
不是$上的属性,为了解决这个问题,你可以在自定义* .d.ts文件中为JQuery接口添加一个定义1)访问组件中的DOM .
您可以通过以下方式包含jQuery . 2)在angular2加载之前在index.html中包含jquery文件
您可以按照以下方式使用Jquery,我在这里使用JQuery Ui日期选择器 .
这对我有用 .
您也可以尝试使用"InjectionToken"导入它 . 如下所述:Use jQuery in Angular/Typescript without a type definition
您可以简单地注入jQuery全局实例并使用它 . 为此,您不需要任何类型定义或类型 .
在app.module.ts中正确设置时:
您可以在组件中开始使用它:
我正在跳过jquery的安装,因为在我之前创建的所有帖子中都提到了这一点 . 所以,你已经安装了jquery . 像这样将t导入到您的组件中
将起作用,但通过创建服务还有另一种“有角度”的方法 .
第一步1:创建 jquery.service.ts file .
步 . 没有 . 2:在 app.module.ts 注册服务
第一步3:将服务注入您的组件 my-super-duper.component.ts
如果有人能解释这两种方法的优点和缺点,我将非常感激:DI jquery作为服务与导入*作为$来自'jquery';
安装jquery
终端$
npm install jquery
(对于bootstrap 4 ......)
终端$
npm install popper.js
终端$
npm install bootstrap
然后将
import
语句添加到app.module.ts
.(对于bootstrap 4 ......)
现在,您将不再需要
<SCRIPT>
标记来引用JavaScript .(您想要使用的任何CSS仍然必须在
styles.css
中引用)在Angular2中使用Jquery(4)
请遵循以下设定
安装Jquery和Juqry类型定义
对于Jquery安装
npm install jquery --save
对于Jquery Type定义安装
npm install @types/jquery --save-dev
然后只需导入jquery