Angular 2
Exemples de composants avancés
Recherche…
Remarques
Rappelez-vous que Angular 2 est tout au sujet de la responsabilité singulière. Quelle que soit la taille de votre composant, dédiez une logique distincte à chaque composant. Qu'il s'agisse d'un bouton, d'un lien d'ancrage sophistiqué, d'un en-tête de dialogue ou même d'un sous-élément de sidenav.
Sélecteur d'image avec aperçu
Dans cet exemple, nous allons créer un sélecteur d'image qui prévisualise votre image avant de la télécharger. L'aperçu prend également en charge le glisser-déposer des fichiers dans l'entrée. Dans cet exemple, je ne couvrirai que le téléchargement de fichiers uniques, mais vous pourrez bricoler un peu pour que le téléchargement de fichiers multiples fonctionne.
image-preview.html
Ceci est la mise en page HTML de notre aperçu de l'image
<!-- 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
Ceci est le fichier principal de notre composant <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>
Et c'est tout. Beaucoup plus facile que c'était dans AngularJS 1.x. J'ai fait ce composant basé sur une ancienne version de AngularJS 1.5.5.
Filtrer les valeurs de table par l'entrée
Importer ReactiveFormsModule
, puis
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();
}
}