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:20] – [3.8 directivas estructurales] 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 | + | * 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=" | + | |
| - | <ng-template #par> | + | === directiva estructural personalizada |
| - | <h1>Número {{ numero }} - Es par</ | + | <code bash>ng g[enerate] d[irective] directivas/ |
| - | </ng-template> | + | * 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 |
| - | + | * la directiva ha de tener un parámetro de entrada (a través de **@Input**) | |
| - | <ng-template #impar> | + | * ejemplo:< |
| - | <h1>Número {{ numero }} - Es impar</h1> | + | <div class=" |
| - | </ng-template> | + | <h1>Demo < |
| + | < | ||
| + | < | ||
| + | <br>< | ||
| + | <p *appMult=" | ||
| + | Saludos | ||
| + | | ||
| + | </div> | ||
| </ | </ | ||
| + | <sxh typescript> | ||
| + | import { Directive } from ' | ||
| + | @Directive({ | ||
| + | selector: ' | ||
| + | }) | ||
| - | == 4.1 directiva bgStyle | + | export class MultDirective { |
| - | == 4.2 ámbito del css | + | |
| - | == 4.3 ngClass | + | |
| - | == 4.4 procesos asíncronos | + | constructor( |
| - | + | | |
| - | == 4.5 Directivas personalizadas | + | private viewContainer: |
| - | * <code bash>ng g[enerate] d[irective] directivas/ | + | |
| + | @Input() set appMult(numero: | ||
| + | for (let i = 0; i < numero; i++) { | ||
| + | this.viewContainer.createEmbeddedView(this.templateRef); | ||
| + | } | ||
| + | } | ||
| + | } | ||
| + | } | ||
| + | </ | ||