我克隆了以下内容: https://github.com/AngularClass/angular2-webpack-starter
我想使用jquery和bootstrap。 我这样做:
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
scrollView.contentSize = CGSizeMake(view.frame.size.width, view.frame.size.height)
}
然后我去vendor.ts添加导入..
npm install jquery bootstrap --save
然后我去了webpack.common.js并添加到"插件:[...]":
import 'jquery';
import 'bootstrap/dist/js/bootstrap';
import 'bootstrap/dist/css/bootstrap.min.css';
为了测试这个,我修改了home.component.html并添加了一个id =" testdiv"其中一个div。
在home.component.ts中,我添加" $('#testdiv')。html(' Jquery Works')"。
当我开始运行时,我遇到了一堆错误:
new webpack.ProvidePlugin({
jQuery: 'jquery',
$: 'jquery',
jquery: 'jquery'
})
我如何解决这个问题?我还尝试使用以下内容修改webpack.common.js:
error_handler.js:46 EXCEPTION: Uncaught (in promise): ReferenceError: $ is not definedErrorHandler.handleError @ error_handler.js:46next @ application_ref.js:298schedulerFn @ async.js:89SafeSubscriber.__tryOrUnsub @ Subscriber.js:223SafeSubscriber.next @ Subscriber.js:172Subscriber._next @ Subscriber.js:125Subscriber.next @ Subscriber.js:89Subject.next @ Subject.js:55EventEmitter.emit @ async.js:81onError @ ng_zone.js:123onHandleError @ ng_zone_impl.js:62ZoneDelegate.handleError @ zone.js:336Zone.runGuarded @ zone.js:242_loop_1 @ zone.js:508drainMicroTaskQueue @ zone.js:515ZoneTask.invoke @ zone.js:437
error_handler.js:51 ORIGINAL STACKTRACE:ErrorHandler.handleError @ error_handler.js:51next @ application_ref.js:298schedulerFn @ async.js:89SafeSubscriber.__tryOrUnsub @ Subscriber.js:223SafeSubscriber.next @ Subscriber.js:172Subscriber._next @ Subscriber.js:125Subscriber.next @ Subscriber.js:89Subject.next @ Subject.js:55EventEmitter.emit @ async.js:81onError @ ng_zone.js:123onHandleError @ ng_zone_impl.js:62ZoneDelegate.handleError @ zone.js:336Zone.runGuarded @ zone.js:242_loop_1 @ zone.js:508drainMicroTaskQueue @ zone.js:515ZoneTask.invoke @ zone.js:437
error_handler.js:52 Error: Uncaught (in promise): ReferenceError: $ is not defined
也没用......
如果我转到我的index.html页面...如果我添加:
new webpack.ProvidePlugin({
'window.jQuery': 'jquery',
'window.$': 'jquery',
})
它有效,但我想避免这样做......
答案 0 :(得分:10)
npm install jquery --save
npm install @types/jquery --save-dev
plugins: [
new webpack.ProvidePlugin({
jQuery: 'jquery',
$: 'jquery',
jquery: 'jquery'
})
]
更多信息她
https://github.com/AngularClass/angular2-webpack-starter/wiki/How-to-include-jQuery
不要使用window.jQuery
答案 1 :(得分:4)
虽然它没有直接回答你的问题,但我建议采用不同的Angular + Bootstrap集成方法:有些库提供了Bootstrap小部件的本机实现。这样您就不需要包含jQuery,也不需要Bootstrap的CSS。
检查https://ng-bootstrap.github.io,这非常容易安装:https://ng-bootstrap.github.io/#/getting-started
答案 2 :(得分:3)
在home.component.ts中导入jquery。
const $ = require('jquery');
最初在vendor.ts文件中导入jquery的优点是bootstrap可以扩展它。 Webpack不需要jquery的任何特殊配置。