访问 Angular2 JavaScript ES5 组件中的元素

Posted

技术标签:

【中文标题】访问 Angular2 JavaScript ES5 组件中的元素【英文标题】:Accessing element in an Angular2 JavaScript ES5 component 【发布时间】:2016-04-10 15:01:51 【问题描述】:

编辑:到目前为止,大多数 cmets 都给了我 TypeScript 解决方案,我觉得我需要在这里重复一下:使用 javascript ES5。

我想创建一个画布组件,在其中根据绑定的属性绘制数据。如何在 Angular2 中使用 JavaScript 做到这一点?

我使用 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 = ));

【问题讨论】:

Access a local variable from the template in the controller in Angular2的可能重复 谢谢,但这似乎提供了 TypeScript 解决方案?标签和标题状态 JavaScript (ES5) 好的,我会写它作为答案。 检查答案是否对您有帮助。 【参考方案1】:

我引用的 TS solution 和 ES5 之间的唯一区别是你调用 ViewChild 的方式

虽然使用 TS 可以直接使用注解 @ViewChild,但在 ES5 中你必须在 Component 中使用 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 演示用法。还有一个answer 可以帮助你更多地了解它的用法。

【讨论】:

【参考方案2】:

给元素添加一个模板变量('#canvas')

template: '<div><canvas #canvas id="randomId"></canvas></div>'

使用@ViewChild注解

@ViewChild('canvas') canvas;

实现AfterViewInit 并在调用ngAfterViewInit() 之后,canvas 字段被初始化为ElementRef。使用canvas.nativeElement,您可以访问&lt;canvas&gt; 元素。

【讨论】:

【参考方案3】:

我不确定非 Typescript 语法是什么,但我相信你自己也知道。

这就是我的做法:

export class Navigation 

    constructor(elementRef: ElementRef) 
        // elementRef.nativeElement is the actual element
    

【讨论】:

谢谢,但我的实际问题是将其翻译成 JavaScript (ES5)

以上是关于访问 Angular2 JavaScript ES5 组件中的元素的主要内容,如果未能解决你的问题,请参考以下文章

将 ES5 JavaScript 用于 Angular 2 应用程序和使用 TypeScript 的优缺点是啥? [关闭]

Angular 2.0:Typescript 是不是支持 ES6 的所有特性?

Angular2 使用 npm reflect-metadata 或 core-js/es7/reflect

TypeScript

前端萌妹讲解:Angular2/Ionic/TypeScript/es6关系

在 Javascript ES6 模块中访问 Vuex 操作