Você está na página 1de 18
oogle — Traducido al Mostrar texto original Opciones ¥ Angular 4 Cheat Sheet 01. Componentes Los componentes son bloques de construccién de una aplicacién angular. Un componente es una combinacién de plantila HTML y una clase de TypeScript (0 JavaScript). Para crear un componente en Angular con TypeScript, cree una clase y decore con el decorador de componentes. Considere la muestra a continuacién import { Component } from 3 @Component({ selector template ») export class HelloWorld { + ~chipHello Angular world* El componente se importa del paquete angular central. El decorador de componentes permite especificar metadatos para el componente dado. Si bien hay muchos campos de metadatos que podemos usar, estos son algunos importantes: selector : es el nombre dado para identificar un componente. En la muestra que acabamos do ver, hello- ng-world se usa para referirse al componente en otra plantilla 0 cédigo HTML, plantilla : es el marcado para el componente dado. Mientras se utiliza el componente, se aplican enlaces con variables en la clase de componente, el estilo y la l6gica de presentacién, templateUrl : es la url de un archivo extern que contiene una plantila para la vista. Para una mejor organizacién del cédigo, la plantilla podria moverse a un archivo separado y la ruta podria especificarse como un valor para templateUrl estilos : se usa para estilos especificos para el componente dado, Ellos tienen alcance al componente. Google Tadicio a: espatol [Mostar texto ofgina Opciones ¥ styleUrls : define los archivos CSS que contienen el estilo del componente, Podemos especificar uno 0 mas archivos CSS en una matriz. A partir de estos archivos CSS, las clases y otros estilos se podrian aplicar en la plantila para el componente. 02. Enlace de datos La interpolacién de cadenas es una manera facil de mostrar datos en una aplicacién angular. Considere la siguiente sintaxis en una plantilla angular para mostrar el valor de una variable, *chiHello {{title}} world” titulo es el nombre de la variable. Observe las comillas simples (retroceso *) alrededor de la cadena, que es la sintaxis de ES6 / ES2015 para mezclar variables en una cadena. El fragmento de cédigo completo para el componente es el siguiente: import { Component } from ‘@angular/core'; @Component ({ selector: 'hello-ng-world’, template: * ») export class HelloWorld { title = ‘angular 4°; + Para mostrar el valor en un campo de texto, use la propiedad DOM " valor” envuelta entre corchetes. Como usa un atributo DOM, es natural y facil de aprender para cualquier persona nueva en Angular. "Titulo" es el nombre de la variable en el componente. Tal enlace podria aplicarse a cualquier atributo HTML. Considere el siguiente ejemplo donde el titulo se usa como un marcador de posicién para el campo de texto. 03. Eventos Para enlazar un evento DOM con una funcién en un componente, use la siguiente sintaxis. Envuelva el evento DOM en paréntesis circular, que invoca una funcién en el componente 3.1 Aceptacién de la entrada del usuario A medida que el usuario introduce valores en campos de texto o realiza selecciones en un ment desplegable o un bot6n de opcién, los valores deben actualizarse en variables de componentes / clases. Podemos usar eventos para lograr esto. El siguiente fragmento de actualizaciones actualiza el valor en un campo de texto, a una variable en el ‘componente. updateValue(event: Event){ // event.target.value has the value on the text field. // Tt is set to the label. ‘this.label = event.target.value; } Google — Traducido al: espafiol | Mostrar texto original Opciones ¥ Nota : Considerando que es un ejemplo basico, el parametro de evento para la funcién anterior es de tipo any . Para una mejor verificacién de tipos, es recomendable declararlo de tipo KeyboardEvent. 3.2 Aceptar la entrada del usuario, una mejor manera En la muestra de entrada de usuario aceptada, $ event expone mucha informacién a la funcién / componente. Encapsula el evento DOM completo desencadenado originalmente. Sin embargo, todas las funciones que necesita son el valor del campo de texto. Considere la siguiente pieza de cédigo, que es una implementacién refinada de la misma. Use la variable de referencia de la plantilla en el campo de texto. Observe la funcién updateValue en change , que acepta el campo de valor en label (variable de referencia de plantilla). La funcién de actualizacién ahora puede establecer el valor en una variable de clase. updateValue(value: any){ // It is set to the label. this.label = value; } 3.3 Platano en una caja Desde Angular 2 en adelante, el enlace de datos bidireccional no esta implicito. Considera la siguiente muestra. A medida que el usuario cambia de valor en el campo de texto, no actualiza instantaneamente el titulo en ht chi> {{title}) Use la siguiente sintaxis para el enlace de datos bidireccional. Combina el enlace de valor y el enlace de evento con la forma abreviada - [()]. En una nota mas ligera, se llama platano en una caja. {{title}) , » Google Tadicio a: espatol [Mostar texto ofgina Opciones ¥ Para completar el proceso DI, especifique el servicio como una propiedad de parametro en el constructor. export class SampleComponent { ‘timeValue: string = this.tine.getTime(); // Tenplate shows constructor(private time: TimeService){ + y Consulte la implementacién de TimeService a continuacién, import { Injectable } from “@angular/core’ ; @Injectable() export class TimeService { constructor() { } getTime(){ let datedbj: Date = new Date(); return *${dateObj.getDay()}/${dateObj .getMonth()}/${datedbj.getFullYear()}” + } 6.3 Proporcionar un servicio a nivel de médulo Cuando TimeService se proporciona a nivel de médulo (en lugar del nivel de componente), la instancia de servicio esta disponible en todo el médulo (y la aplicacién). Funciona como singleton en toda la aplicacién @NgHodule({ declarations: [ ‘AppComponent,, SampleConponent L imports: [ BrowserModule 1, providers: [TimeService], bootstrap: [AppComponent] » export class AppModule { } io 6.4 Sintaxis alternativa para proporcionar un servi En la muestra anterior, la declaracién del proveedor es un atajo para lo siguiente, // instead of providers: [TimeService] you may use the following, providers: [{provide: TimeService, useClass: TimeService}] Permite usar una implementacién especializada o alternativa de la clase (TimeService en este ejemplo). La nueva clase podria ser una clase derivada o la que tenga firmas de funcién similares a la clase original providers: [{provide: TimeService, useClass: AlternateTimeService}] En aras de un ejemplo, el AlternateTimeService proporciona un valor de fecha y hora. Original TimeService proporcioné solo el valor de la fecha. Google Tadicio a: espatol [Mostar texto ofgina Opciones ¥ @injectable() export class AlternateTimeService extends TimeService { constructor() { super(); getTime(){ let dateobj: Date = new Date(); return ~${dateObj..getDay()}/${dateobj .getMonth()}/${dateObj . getFullvear()} ${dateObj.getHours()}:${dateObj.getMinutes()} "5 + , Nota : Cuando la instruccién siguiente se utiliza para proporcionar un servicio, el inyector angular crea una nueva instancia del servicio. [{provide: TimeService, useClass: AlternateTimeService}] Para usar una instancia existente del servicio, use useExisting en vez de useClass providers: [AlternateTimeService, {provide: TimeService, useExisting: AlternateTimeService}] 6.5 Proporcionar una interfaz y su implementacién Puede ser una buena idea proporcionar una interfaz e implementacién como una clase o un valor. Considera la siguiente interfaz. interface Time{ getTime(): string export default Times Podria ser implementado por TimeService @injectable() export class TimeService implements Time { constructor() { } getTime(){ let dateddj: Date = new Date(); return ~${dateObj..getDay()}/${dateobj .getmonth()}/${dateObj.getFullYear()}" } } En este punto, no podemos implementar la interfaz Time y la clase TimeService como la muestra anterior. La siguiente pieza de o6digo no funciona, porque una interfaz de TypeSoript no se compila con ningtin equivalente en JavaScript. providers: [{provide: Time, useClass: TimeService}] // Wrong Para que esto funcione, importe Inject (Decorator) e InjectionToken desde @ angular / core // create an object of InjectionToken that confines to interface Time let Time Service = new InjectionToken