編集:これまでのほとんどのコメントでTypeScriptソリューションが得られたので、ここで繰り返す必要があると感じています:JavaScriptES5の使用。
バインドされたプロパティに基づいてデータを描画するキャンバスコンポーネントを作成したいと思います。 JavaScriptを使用してAngular2でこれを行うにはどうすればよいですか?
Angular 1での私のアプローチは、ディレクティブで要素参照を取得することですが、これが現在どのように行われるべきかを知ることができません。
これはうまくいくように見えるアプローチですが、これを行った後は手を洗いたいと思います:
(function (app) {
app.DrawingComponent = ng.core
.Component({
selector: 'my-drawing',
template: '<div><canvas id="{{randomId}}"></canvas></div>'
})
.Class({
constructor: function () {
this.randomId = "canvas" + Math.random();
},
ngAfterViewInit: function() {
var canvas = document.getElementById(this.randomId);
console.log(canvas);
}
});
})(window.app || (window.app = {}));
TS solution 私が参照したものとES5の唯一の違いは、ViewChild
の呼び出し方法です。
TSでは注釈@ViewChild
を直接使用できますが、ES5ではコンポーネントでqueries
パラメーターを使用する必要があります
app.DrawingComponent = ng.core
.Component({
selector: 'my-drawing',
template: '<div><canvas #myCanvas></canvas></div>',
// Check here! This is important!
queries : {
myCanvas : new ng.core.ViewChild('myCanvas')
}
})
.Class({
constructor: function () {},
ngAfterViewInit: function() {
console.log(this.myCanvas);
}
});
これが plnkr の使用法を示しています。もう1つ answer があり、その使用法をもう少し理解するのに役立ちます。
TypeScript以外の構文が何であるかはわかりませんが、ご自身でご存知だと思います。
これは私がそれをした方法です:
export class Navigation {
constructor(elementRef: ElementRef) {
// elementRef.nativeElement is the actual element
}
}