javascript - Angular 4 : TypeError: this. 函数不是函数

标签 javascript angular typescript canvas

我没有主意了..我看到这个问题被问了很多次 herehere还有更多,但我找不到解决我的问题的方法。据我了解,问题是 this 它没有引用正确的上下文。如何使用箭头函数从声明站点捕获this

drawImageProp(ctx, img, x, y, w, h, offsetX, offsetY) {
    // more code than displayed here
    ctx.drawImage(img, cx, cy, cw, ch, x, y, w, h);
}

onFileSelected(event) {
    for (const file of event.target.files) {
        if (file) {
            const reader = new FileReader();

            reader.onload = function(e: FileReaderEvent) {
                const canvas = <HTMLCanvasElement>document.getElementById('canvas');
                const ctx = canvas.getContext('2d');
                const img = new Image;

                img.onload = draw;

                function draw() {
                    this.drawImageProp(ctx, this, 0, 0, canvas.width, canvas.height, 0.5, 0.5);
                }

                img.src = e.target.result;
            };

            reader.readAsDataURL(file);
        }
    }
}

最佳答案

使用闭包:

onFileSelected(event) {
    const self = this;
    for (const file of event.target.files) {
        if (file) {
            const reader = new FileReader();

            reader.onload = function(e: FileReaderEvent) {
                const canvas = <HTMLCanvasElement>document.getElementById('canvas');
                const ctx = canvas.getContext('2d');
                const img = new Image;

                img.onload = draw;

                function draw() {
                    self.drawImageProp(ctx, img, 0, 0, canvas.width, canvas.height, 0.5, 0.5);
                }

                img.src = e.target.result;
            };

            reader.readAsDataURL(file);
        }
    }
}

关于javascript - Angular 4 : TypeError: this. 函数不是函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50689998/

相关文章:

javascript - 是否可以在一个 html 事件上调用两个 javascript 函数?

javascript - 当前数字的正则表达式

javascript - Angular 7,没有 NgModel 如何获取复选框状态(真/假)?

node.js - 使用 TypeORM 进行集成测试

angular - CKEditor 占位符 Angular 2

angular - 当用户离线并返回在线时,如何使我的 ionic 清新器正常工作?

javascript - Ionic : $ionicPlatform. isIOS() 在 Controller 方法中不起作用

javascript - 当涉及到 Websockets 时,我不确定要使此应用程序在 Google Cloud 上正常运行我缺少什么

javascript - 如何从 Angular ngFor 中的方法中提取值

arrays - Angular 2 pipe - 计算对象数组的摘要