Angular 2
Exempel på avancerade komponenter
Sök…
Anmärkningar
Kom ihåg att Angular 2 handlar om singular ansvar. Oavsett hur liten din komponent är, dedikerar du en separat logik för varje komponent. Det är en knapp, en snygg ankarlänk, en dialogrubrik eller till och med en sidavs underobjekt.
Bildväljare med förhandsvisning
I det här exemplet kommer vi att skapa en bildväljare som förhandsgranskar din bild innan du laddar upp den. Förhandsgranskaren stöder också att dra och släppa filer till ingången. I det här exemplet kommer jag bara att täcka överföring av enstaka filer, men du kan tänka lite för att få flera filuppladdningar att fungera.
bild-preview.html
Det här är HTML-layouten för vår förhandsgranskning av bilden
<!-- 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="">
bild-preview.ts
Detta är huvudfilen för <image-preview>
-komponenten
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>
Och det är allt. Sätt enklare än det var i AngularJS 1.x. Jag gjorde faktiskt denna komponent baserad på en äldre version som jag gjorde i AngularJS 1.5.5.
Filtrera ut tabellvärden efter ingången
Importera ReactiveFormsModule
och sedan
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();
}
}