Angular 2
Esempi di componenti avanzati
Ricerca…
Osservazioni
Ricorda che Angular 2 riguarda esclusivamente la responsabilità singolare. Non importa quanto piccolo sia il tuo componente, dedica una logica separata per ogni singolo componente. Che si tratti di un pulsante, di un collegamento di ancoraggio di fantasia, di un'intestazione di dialogo o anche di un elemento secondario di sidenav.
Selettore immagini con anteprima
In questo esempio, creeremo un selettore di immagini che prevede l'anteprima della tua immagine prima del caricamento. L'anteprima supporta anche il trascinamento dei file nell'input. In questo esempio, coprirò solo il caricamento di singoli file, ma puoi armeggiare un po 'per far funzionare il caricamento di più file.
image-preview.html
Questo è il layout html della nostra anteprima dell'immagine
<!-- 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="">
immagine-preview.ts
Questo è il file principale per il nostro componente <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>
E questo è tutto. Molto più facile di quanto non fosse in AngularJS 1.x. Realmente ho realizzato questo componente basandomi su una versione precedente che ho realizzato in AngularJS 1.5.5.
Filtra i valori della tabella in base all'input
Importa ReactiveFormsModule
e quindi
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();
}
}