Diferències
Ací es mostren les diferències entre la revisió seleccionada i la versió actual de la pàgina.
| Ambdós costats versió prèvia Revisió prèvia Següent revisió | Revisió prèvia | ||
| development:angular:directivas [26/01/2020 10:39] – [ngStyle] mate | development:angular:directivas [09/02/2020 14:46] (actual) – mate | ||
|---|---|---|---|
| Línia 1: | Línia 1: | ||
| - | = angular: directivas | + | = angular: directivas |
| - | * PPT 3.7 + 3.8 + 3.9 + 4.1 + 4.2 + 4.3 | + | * componentes |
| - | * lógica en capa de presentación (plantilla) | + | * directivas con plantilla |
| - | * se reconocen por tener **%%*%%** en el nombre | + | * son del tipo más común |
| - | * no es necesario fichero | + | * [[development: |
| - | * no es un componente | + | |
| + | * se usan como atributos de los elementos | ||
| + | * [[development: | ||
| + | * modifican la representación del DOM añadiendo o eliminando elementos | ||
| + | * cambian la estructura de la vista (ngFor, ngIf) | ||
| - | == ngIf | + | == directivas personalizadas |
| - | * elemento que queremos ocultar o mostrar | + | * para extender las capacidades del framework |
| - | * se le asigna algun expresión que retorne un boolean | + | * creamos nuestros propias directivas de atributo |
| - | * angular crea o descrea el elemento del DOM según marque la variable: <sxh javascript; title: | + | |
| - | * **mostrar** al estar vinculado a la directiva hace referencia a un atributo de la clase, si no, iría entre %%{{ }}%% | + | |
| - | * binding de eventos:< | + | |
| - | == ngFor | + | === directiva de atributo personalizada |
| - | * repite el elemento:<sxh html; title: ejemplo *ngFor><li *ngFor=" | + | * queremos crear algo así:<sxh html>< |
| - | * usamos un array **colores** defindo en la clas del componente:<sxh typescript> | + | * usando el cli generamos el código genérico:< |
| - | | + | |
| - | | + | @Directive({ |
| - | ... | + | selector: ' |
| + | }) | ||
| + | |||
| + | export class DestacadoDirective | ||
| + | | ||
| + | const nativeElement | ||
| + | nativeElement.style.fontSize | ||
| + | | ||
| + | | ||
| + | nativeElement.style.border = '2px solid red'; | ||
| + | } | ||
| }</ | }</ | ||
| - | | + | |
| + | * aceptando parámetros desde el componente .html< | ||
| + | import | ||
| + | @Directive({ | ||
| + | selector: ' | ||
| + | }) | ||
| - | == ngIf-else | + | export class DestacadoDirective implements OnInit { |
| - | <sxh html; title: ejemplo ngIf-else + ngTemplate 1>< | + | @Input(' |
| - | <h1>Número {{ numero }} - Es par</h1> | + | constructor(private el: ElementRef) { } |
| + | ngOnInit(): void { | ||
| + | const nativeElement | ||
| + | nativeElement.style.fontSize | ||
| + | nativeElement.style.color = this.userColor || ' | ||
| + | nativeElement.style.textAlign = ' | ||
| + | nativeElement.style.border = '2px solid ' | ||
| + | } | ||
| + | } | ||
| + | </ | ||
| + | * usamos el decorador **@Input** para recibir el parámetro que recibimos desde el html:<sxh html; highlight:7> | ||
| + | < | ||
| + | <h1>Demo < | ||
| + | < | ||
| + | < | ||
| + | < | ||
| + | <div appDestacado> | ||
| + | <div [appDestacado]="' | ||
| </ | </ | ||
| - | < | ||
| - | < | ||
| - | </ | ||
| - | |||
| - | <sxh html; title: ejemplo ngIf-else + ngTemplate 2> | ||
| - | <div *ngIf=" | ||
| - | |||
| - | < | ||
| - | < | ||
| - | </ | ||
| - | |||
| - | < | ||
| - | < | ||
| - | </ | ||
| </ | </ | ||
| - | == ngStyle | + | === directiva estructural personalizada |
| - | * cambio de estilo de elementos HTML usando atributos de los componentes | + | <code bash> |
| - | * scope de actuación del CSS -> propio del componente, no efecta a otros | + | * en contraposición a las directivas de atributo, tenemos que acceder a través del constructor a la plantilla a la que la directive puede acceder, es decir, a la pantilla que posiblemente necesitemos modificar |
| - | * añadir/ | + | |
| - | * directivas personalizadas | + | * ejemplo:< |
| - | * <code bash> | + | <div class="container main.container"> |
| - | * directorio | + | < |
| - | | + | <hr> |
| - | * '' | + | <app-clases></app-clases> |
| - | * '' | + | <br><br> |
| - | + | <p *appMult="5"> | |
| - | < | + | Saludos |
| - | ... | + | |
| - | template: `<p [ngStyle]="{' | + | </ |
| - | ... | + | |
| - | export class NgStyleComponent implements OnInit { | + | |
| - | tam: number =15; | + | |
| - | }</sxh> | + | |
| - | <sxh typescript; title: otra forma de ngStyle> | + | |
| - | template: `<p [style.fontSize]="' | + | |
| - | </sxh> | + | |
| - | <sxh typescript; title: otra forma más de ngStyle> | + | |
| - | template: `<p [style.fontSize.px]="tam">Probando ngStyle...</p>` | + | |
| </ | </ | ||
| + | <sxh typescript> | ||
| + | import { Directive } from ' | ||
| - | == ámbito CSS | + | @Directive({ |
| - | * para evitar colisiones de estilos, angular se encarga de añadir atributos para que cada componente tenga sus propios estilos | + | |
| - | * si queremos estilos a nivel global, deberemos tocar **style.css** | + | }) |
| - | == ngClass | + | export class MultDirective |
| - | * más usada y más flexibilidad que **ngStyle** | + | |
| - | * sintaxis: | + | |
| - | * <sxh typescript; title: ngClass>< | + | |
| - | * <sxh typescript; title: ngClass>< | + | |
| - | * <sxh typescript; title: ngClass>< | + | |
| - | * <sxh typescript; title: ngClass>< | + | |
| - | * <sxh typescript; title: ngClass>< | + | |
| - | == procesos asíncronos | + | constructor( |
| - | + | | |
| - | + | private viewContainer: | |
| - | == ngSwitch | + | |
| - | + | ||
| - | == 4.5 Directivas personalizadas | + | |
| - | * <code bash>ng g[enerate] d[irective] directivas/ | + | |
| + | @Input() set appMult(numero: | ||
| + | for (let i = 0; i < numero; i++) { | ||
| + | this.viewContainer.createEmbeddedView(this.templateRef); | ||
| + | } | ||
| + | } | ||
| + | } | ||
| + | } | ||
| + | </ | ||