在 .NET 生成的 Angular 4 应用程序中使用 jQuery/jQuery-UI
我尝试在由 Microsoft 的 SpaTemplate/JavaScript 服务 (dontnet new angular) 生成的 Angular 4 应用程序中使用 jQuery / jQuery UI。这不使用 Angular-CLI,并且没有 angular-cli.json 文件。
我已经搜索过这个,在 SO 上找到了一些使用 CLI 生成的项目,但我似乎无法将其用于我的项目。
我已经通过 NPM 安装了 jQuery 和 jQuery-UI(jQuery 已经存在,但我根据另一个 SO 帖子的回答卸载并重新安装了它)。这会将它们都放在 node_modules 文件夹中,并将它们列在 webpack.config.vendor.js、package.json 和 package-lock.json 文件中。
webpack.config.vendor.js:
entry: {
vendor: [
'@angular/animations',
'@angular/common',
'@angular/compiler',
'@angular/core',
'@angular/forms',
'@angular/http',
'@angular/platform-browser',
'@angular/platform-browser-dynamic',
'@angular/router',
'jquery',
'jquery-ui',
'bootstrap',
'bootstrap/dist/css/bootstrap.css',
'es6-shim',
'es6-promise',
'event-source-polyfill',
'zone.js',
]
},
package.json
"dependencies": {
"jquery": "^3.2.1",
"jquery-ui": "^1.12.1",
//others removed to keep this short
},
package-lock.json(依赖项部分)
"jquery": {
"version": "3.2.1",
"resolved": "https://registry.npmjs.org/jquery/-/jquery-3.2.1.tgz",
"integrity": "sha1-XE2d5lKvbNCncBVKYxu6ErAVx4c="
},
"jquery-ui": {
"version": "1.12.1",
"resolved": "https://registry.npmjs.org/jquery-ui/-/jquery-ui-1.12.1.tgz",
"integrity": "sha1-vLQEXI3QU5wTS8FIjN0+dop6nlE="
},
现在,我不知道如何在组件 TS 文件中使用它们。我知道 jQuery 可以正常工作,因为此模板使用 Bootstrap,并且汉堡包导航在移动设备上运行良好。Bootstrap 使用 jQuery 制作下拉动画。
其他帖子说要将此添加到组件 TS 文件中:
declare var $:any;
当我尝试在组件的 ngOnInit 部分执行 $('#myElement').datepicker() 时,这样做会导致错误:
vendor.js?v=HQi6Yanr6lb0tcDpEWxOLi8IMea49FFYgwADBy-xMjk:31 ERROR Error: Uncaught (in promise): ReferenceError: $ is not defined ReferenceError: $ is not defined
另一篇 SO 帖子说要这样做而不是声明:
import * as $ from 'jQuery';
由于它不知道 jQuery-UI,因此它给了我一个不同的错误:
[ts] Property 'datepicker' does not exist on type 'JQuery'.
最后,另一个答案说了这一点(针对 Angular2):
import $ from 'jquery';
import 'jqueryui';
但是,jquery 导入不起作用,因为它说 jquery 没有默认导出。我还必须将 jqueryui 更改为 jquery-ui。不管怎样,这都行不通。
我遗漏了什么?我似乎找到了相互矛盾的答案,它们都与使用 Angular-CLI 生成的应用程序有关,而我却没有机会使用它。感谢您的帮助。
添加新引用后,您是否重建了供应商软件包? 每次向供应商配置添加新的 npm 包时,都应执行此命令:
webpack --config webpack.vendor.config.js
看来您需要 JQuery 的类型定义。搜索 JQuery 的“@type/jquery”包并使用 NPM 添加它。
我会避免将 JQuery 与 Angular 一起使用,因为在大多数情况下,它们效果不佳。JQuery 在 DOM 上运行,而 Angular 在虚拟 DOM 上运行,这会导致很多混乱和错误。可以让它运行,但在很多情况下都很困难。第三方 jQuery 库也可能因此无法正常运行。
如果您需要 UI 组件,请使用一些专为 Angular 设计的组件: