Angular 2
Ejemplos de componentes avanzados
Buscar..
Observaciones
Recuerda que Angular 2 tiene que ver con la responsabilidad singular. No importa lo pequeño que sea su componente, dedique una lógica separada para cada componente. Ya sea un botón, un enlace de anclaje elegante, un encabezado de diálogo o incluso un subelemento de sidenav.
Selector de imágenes con vista previa
En este ejemplo, vamos a crear un selector de imágenes que muestra una vista previa de la imagen antes de subirla. La vista previa también admite archivos de arrastrar y soltar en la entrada. En este ejemplo, solo cubriré la carga de archivos individuales, pero puede hacer un pequeño esfuerzo para que la carga de múltiples archivos funcione.
image-preview.html
Este es el diseño html de nuestra vista previa de imagen
<!-- 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
Este es el archivo principal para nuestro 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>
Y eso es. Mucho más fácil de lo que era en AngularJS 1.x. Realmente hice este componente basado en una versión anterior que hice en AngularJS 1.5.5.
Filtrar los valores de la tabla por la entrada
Importe ReactiveFormsModule
, y luego
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();
}
}