Angular 2 让用户从他们的本地机器上选择和镜像

Angular 2 let user choose and image from their local machine

我是 Angular 的新手。我正在尝试使用 Angular 2 制作一个简单的网络应用程序,我允许用户从他们的本地计算机 select 和图像。然后我想在 <img> 标签中显示此图像。稍后对图像执行旋转、更改比例、更改宽度等操作

这就是我的组件

@Component({
    selector: 'image-container',
    template: `
        <input type="file" (change)="changeListner($event)" />
        <img id="image"/>
    `,
    directives: [ImageActionsComponent]
})
export class ImageContainerComponent { 
   // make FileReader work with Angular2
   changeListner(event){
        var reader = new FileReader();

        reader.onloaded = function (e) {
            // get loaded data and render thumbnail.
            var src = e.target.result;
            document.getElementById("image").src = src;
        };

        // read the image file as a data URL.
        reader.readAsDataURL(event.target.files[0]);
    }
}

但是根本不管用。如何使用 Angular2 读取图像并更新 src 属性?

我只是想学习 Angular。 :)

有更好更简单的方法吗?

它不起作用,因为您有 onloaded 事件名称。没有这个事件,应该是onload:

import {Component, ElementRef} from 'angular2/core'

@Component({
    selector: 'image-container',
    template: `
        <input type="file" (change)="changeListner($event)" />
        <img class="image" />
    `,
    directives: [ImageActionsComponent]
})
export class ImageContainerComponent {
    constructor(private element: ElementRef) {}

    changeListner(event) {
        var reader = new FileReader();
        var image = this.element.nativeElement.querySelector('.image');

        reader.onload = function(e) {
            var src = e.target.result;
            image.src = src;
        };

        reader.readAsDataURL(event.target.files[0]);
    }
}

此外,最好使用 ElementRef 在组件中定位图像。

对于那些遇到此错误 angular 的人:属性 结果不存在于类型 EventTarget

您可以通过以下方式简单地解决它:

this.url = event.target['result']

我的解决方案是这样的:

reader.onload = (e) => {
   image.src=reader.result;
}

因为这个答案指出 避免 属性 'result' 在类型 'eventtarget' 上不存在 您还可以确定 e 的类型为 any,如下所示:

reader.onload = function(e: any) {
        var src = e.target.result;
        image.src = src;
    };