jQueryのtypeScript定義がどこにあるのかを知る必要があります。これはタイピングで行うことができます。あなたはこのようなあなたのタイピングを入れTSファイル:
///<reference path="../typings/jquery/jquery.d.ts" />
それとも、ノードを介してタイピングをインストールして、設定が自動的にロードさせることができます。これは、角張っていることです。
その後、Angular2でjQueryを使用するには、基本的なメカニズムを理解する必要があります。 Angular2は独自のDOM表現を持ち、jQueryはこのDOMを操作します。そのため、人々は「Angular2でjQueryを使用しないでください」と言っています。間違いです。 Angular2にはこの問題の解決策があります。それはControlValueAccessorと呼ばれます。これの目的は、jQueryプラグインがDOMを変更するときに角度を警告することです。また、DOMを変更するときにプラグインに通知するようにします。
日付ピッカーカレンダーの例を使って説明します。ここ
import { Directive, ElementRef, OnInit, AfterViewInit, Input, forwardRef, OnDestroy } from '@angular/core';
import { Moment } from 'moment';
import { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';
const DATE_PICKER_VALUE_ACCESSOR = {
provide: NG_VALUE_ACCESSOR,
useExisting: forwardRef(() => FnCalendarDirective),
multi: true,
};
@Directive({
selector: '[fn-calendar]',
providers: [DATE_PICKER_VALUE_ACCESSOR],
})
export class FnCalendarDirective implements OnInit, AfterViewInit, ControlValueAccessor, OnDestroy {
@Input() format: string = 'DD/MM/YYYY HH:mm';
@Input() showClose: boolean = true;
@Input() sideBySide: boolean = false;
@Input() ngModel;
private onTouched =() => { };
private onChange: (value: string) => void =() => { };
constructor(private el: ElementRef) {
}
ngOnInit() {
}
ngAfterViewInit() {
$(this.el.nativeElement).datetimepicker({
locale: 'fr',
sideBySide: this.sideBySide,
format: this.format,
showClose: this.showClose,
icons: {
time: 'fa fa-clock-o',
date: 'fa fa-calendar',
up: 'fa fa-chevron-up',
down: 'fa fa-chevron-down',
previous: 'fa fa-chevron-left',
next: 'fa fa-chevron-right',
today: 'fa fa-bullseye',
clear: 'fa fa-trash',
close: 'fa fa-times'
},
}).on('dp.change', event => {
let date: Moment = (<Moment>(<any>event).date);
if (date) {
let value = date.format(this.format);
this.onChange(value);
}
});
this.writeValue(this.ngModel);
}
writeValue(date: string) {
$(this.el.nativeElement).datetimepicker().data('DateTimePicker').date(date);
}
registerOnChange(fn: any) {
this.onChange = fn;
}
registerOnTouched(fn: any) {
this.onTouched = fn;
}
ngOnDestroy() {
$(this.el.nativeElement).datetimepicker().data('DateTimePicker').destroy();
}
}
重要なものは、Angular2は変更が生産しているあなたのjQueryプラグインを通知してみましょうwriteValue方法です。そして、あなたのプラグインがDOMを変更することをAngular2に通知するregisterOnChange。
結論として、jQueryを使用する鍵は、jQueryプラグインをディレクティブ内にラップし、プラグインとAngular2間の通信を処理するためにCustomValueAccesorを実装することです。
タイピングを見つけるには、DefinitlyTyped jitライブラリのlotからの型定義のリポジトリであるGitHubを使用できます。
[1]: http://blog.thoughtram.io/angular/2016/07/27/custom-form-controls-in-angular-2.html
角度でのjQueryの使用を避けることをお勧めします。 http://stackoverflow.com/questions/14994391/thinking-in-angularjs-if-i-have-a-jquery-background?rq=1 – Jay
@JayこのリンクはAngular1に対応しています。Angular2もjQueryを避けています。 ?あなたはそれを参考にしていますか? –
役立つかもしれないhttp://www.code-sample.com/2016/07/use-jquery-with-angular-2.html –