預覽影象選擇器
在此示例中,我們將建立一個影象選擇器,在上傳之前預覽你的圖片。預覽器還支援將檔案拖放到輸入中。在這個例子中,我只是要介紹上傳單個檔案,但你可以修改一下以使多檔案上傳工作。
影象 preview.html
這是我們影象預覽的 html 佈局
<!-- Icon as placeholder when no file picked -->
<i class="material-icons">cloud_upload</i>
<!-- file input, accepts images only. Detect when file has been picked/changed with Angular's native (change) event listener -->
<input type="file" accept="image/*" (change)="updateSource($event)">
<!-- img placeholder when a file has been picked. shows only when 'source' is not empty -->
<img *ngIf="source" [src]="source" src="">
影象 preview.ts
這是我們的 <image-preview> 元件的主要檔案
import {
    Component,
    Output,
    EventEmitter,
} from '@angular/core';
@Component({
    selector: 'image-preview',
    styleUrls: [ './image-preview.css' ],
    templateUrl: './image-preview.html'
})
export class MtImagePreviewComponent {
    // Emit an event when a file has been picked. Here we return the file itself
    @Output() onChange: EventEmitter<File> = new EventEmitter<File>();
    constructor() {}
    // If the input has changed(file picked) we project the file into the img previewer
    updateSource($event: Event) {
        // We access he file with $event.target['files'][0]
        this.projectImage($event.target['files'][0]);
    }
    // Uses FileReader to read the file from the input
    source:string = '';
    projectImage(file: File) {
        let reader = new FileReader;
        // TODO: Define type of 'e'
        reader.onload = (e: any) => {
            // Simply set e.target.result as our <img> src in the layout
            this.source = e.target.result;
            this.onChange.emit(file);
        };
        // This will process our file and get it's attributes/data
        reader.readAsDataURL(file);
    }
}
another.component.html
<form (ngSubmit)="submitPhoto()">
    <image-preview (onChange)="getFile($event)"></image-preview>
    <button type="submit">Upload</button>
</form>
就是這樣。比 AngularJS 1.x 更容易。我實際上是根據我在 AngularJS 1.5.5 中製作的舊版本製作了這個元件。