如何在Angular 2中使用jQuery UI

因为我想在我的应用程序中加入拖放function,所以我决定将jQuery UI导入我的Angular 2项目。

首先,我开始通过执行以下操作导入jQuery本身:

import { ElementRef } from '@angular/core'; declare var jQuery:any; ngOnInit() { jQuery(this._elRef.nativeElement).find('ul.tabs').tabs(); } 

这非常适合初始化东西。 但是,当我尝试.draggable()函数时,我收到以下错误:

jQuery(...).draggable is not a function

我怎样才能做到这一点? 我阅读了很多方法但是所有这些方法都使用了系统-js,在当前版本的Angular-cli中我没有使用它。 我知道在Angular 2应用程序中使用jQuery并不是最好的方法,但我只需要一个用户可以删除可拖动小部件的网格。

如果您有任何建议,那将是完美的! 谢谢!

我设法通过执行以下步骤使其工作:

  1. npm卸载jquery jquery-ui
  2. npm缓存干净
  3. npm install jquery jquery-ui
  4. 在angular-cli.json中,我在scripts对象中添加了jquery和jquery-ui路径。 这是他们看起来的样子:

    "scripts": [ "../node_modules/jquery/dist/jquery.min.js", "../node_modules/jquery-ui/jquery-ui.js" ]

完成这些步骤后,它就像一个魅力。 希望能帮助那些遇到问题的人。

我使用angular2和jqueryUI。 您需要导入jquery和jqueryUI

 //SystemJS System.config({ defaultJSExtensions: true, paths: { // paths serve as alias 'npm:': 'node_modules/' }, map: { 'app': 'app', // angular bundles '@angular/core': 'npm:@angular/core/bundles/core.umd.js', '@angular/common': 'npm:@angular/common/bundles/common.umd.js', '@angular/compiler': 'npm:@angular/compiler/bundles/compiler.umd.js', '@angular/platform-browser': 'npm:@angular/platform-browser/bundles/platform-browser.umd.js', '@angular/platform-browser-dynamic': 'npm:@angular/platform-browser-dynamic/bundles/platform-browser-dynamic.umd.js', '@angular/http': 'npm:@angular/http/bundles/http.umd.js', '@angular/router': 'npm:@angular/router/bundles/router.umd.js', '@angular/forms': 'npm:@angular/forms/bundles/forms.umd.js', // other libraries 'rxjs': 'npm:rxjs', jquery: 'http://ajax.googleapis.com/ajax/libs/jquery/2.2.2/jquery.min.js', jqueryui: 'npm:jqueryui/jquery-ui.min.js', material: 'npm:material-design-lite/dist/material.min.js' }, packages: { app: { main: 'main', format: 'register', defaultExtension: 'js' }, 'rxjs': { defaultExtension: 'js' } }, }); /////////////////////////////// 

// Angular2组件

 import $ from 'jquery'; import 'jqueryui'; 

您选择的元素可能尚未可用,因此选择器无法找到该元素。

您可能应该在ngAfterViewInit生命周期钩子(类似于ngOnInit)中调用.draggable()以确保在附加之前存在DOM元素。

npm install jquery jquery-ui –save

npm install @ types / jquery –save-dev

 import * as $ from 'jquery'; import 'jquery-ui/ui/widgets/selectable.js'; 

用法:

 ngAfterViewInit(): void { ($('.selectable') as any).selectable({..}); } 

如果使用sass,您可能还想在style.scss上导入样式表

 @import '../node_modules/jquery-ui/themes/base/selectable.css'; 

要么

在.angular-cli.json

 "styles": [ "../node_modules/jquery-ui/themes/base/selectable.css", "./styles.scss" ], 

###重要###

错误

 import * as $ from 'jquery'; import 'jquery-ui-dist/jquery-ui'; 

因为编译器有问题。
正确

 declare var require: any var $ = require('jquery'); require('jquery-ui-dist/jquery-ui'); 

要么

 declare var require: any var $ = require('jquery'); import 'jquery-ui-dist/jquery-ui';