编辑:由于大多数评论到目前为止都给了我TypeScript解决方案,我觉得我需要在这里重复一遍:使用JavaScript ES5。
我想创建一个canvas组件,我根据绑定属性绘制数据。如何使用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 = {}));
答案 0 :(得分:9)
我引用的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);
}
});
答案 1 :(得分:6)
将模板变量('#canvas')添加到元素
template: '<div><canvas #canvas id="{{randomId}}"></canvas></div>'
使用@ViewChild
注释
@ViewChild('canvas') canvas;
实施AfterViewInit
并在调用ngAfterViewInit()
后,使用canvas
初始化ElementRef
字段。使用canvas.nativeElement
,您可以访问<canvas>
元素。
答案 2 :(得分:0)
我不确定非打字稿语法是什么,但我确定你知道自己。
我就是这样做的:
export class Navigation {
constructor(elementRef: ElementRef) {
// elementRef.nativeElement is the actual element
}
}