Zoeken…


Opmerkingen

Onthoud dat Angular 2 draait om enkelvoudige verantwoordelijkheid. Hoe klein uw component ook is, wijd een afzonderlijke logica voor elk component. Of het nu een knop, een mooie ankerlink, een dialoogkop of zelfs een subitem van een sidenav is.

Afbeeldingskiezer met voorbeeld

In dit voorbeeld gaan we een afbeeldingskiezer maken die een voorbeeld van uw foto bekijkt voordat deze wordt geüpload. De previewer ondersteunt ook bestanden slepen en neerzetten in de invoer. In dit voorbeeld ga ik alleen in op het uploaden van afzonderlijke bestanden, maar je kunt een beetje sleutelen om het uploaden van meerdere bestanden te laten werken.

image-preview.html

Dit is de html-indeling van onze voorbeeldweergave

<!-- 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="">

image-preview.ts

Dit is het hoofdbestand voor onze component <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>

En dat is het. Veel eenvoudiger dan het was in AngularJS 1.x. Ik heb dit onderdeel eigenlijk gemaakt op basis van een oudere versie die ik in AngularJS 1.5.5 heb gemaakt.

Filter tabelwaarden uit door de invoer

Importeer ReactiveFormsModule en vervolgens

import { Component, OnInit, OnDestroy } from '@angular/core';
import { FormControl } from '@angular/forms';
import { Subscription } from 'rxjs';

@Component({
  selector: 'component',
  template: `
    <input [formControl]="control" />
    <div *ngFor="let item of content">
      {{item.id}} - {{item.name}}
    </div>
  `
})
export class MyComponent implements OnInit, OnDestroy {

  public control = new FormControl('');

  public content: { id: number; name: string; }[];
  
  private originalContent = [
    { id: 1, name: 'abc' },
    { id: 2, name: 'abce' },
    { id: 3, name: 'ced' }
  ];
  
  private subscription: Subscription;
  
  public ngOnInit() {
    this.subscription = this.control.valueChanges.subscribe(value => {
      this.content = this.originalContent.filter(item => item.name.startsWith(value));
    });
  }
  
  public ngOnDestroy() {
    this.subscription.unsubscribe();
  }
  
}


Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow