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 [22/01/2020 12:14] – [4.3 ngClass] mate | development:angular:directivas [09/02/2020 14:46] (actual) – mate | ||
|---|---|---|---|
| Línia 1: | Línia 1: | ||
| - | = directivas | + | = angular: |
| - | == 3.7 directivas | + | * componentes |
| - | * no es necesario fichero HTML | + | * directivas |
| - | * no es un componente | + | * son del tipo más común |
| - | * se reconocen por tener **%%*%%** en el nombre | + | * [[development: |
| + | * cambian la apariencia o el comportamiento de un elemento, | ||
| + | * se usan como atributos de los elementos HTML (ngStyle) | ||
| + | | ||
| + | | ||
| + | | ||
| - | == 3.8 directivas | + | == directivas |
| - | * directivas | + | * para extender las capacidades del framework |
| - | * {{ : | + | * creamos nuestros propias directivas |
| - | * binding | + | |
| - | * {{ : | + | |
| - | == 4.1 directiva | + | === directiva |
| - | == 4.2 ámbito del css | + | * queremos crear algo así:< |
| - | == 4.3 ngClass | + | * usando el cli generamos el código genérico:< |
| + | * obtendremos algo así y le añadiremos las líneas marcadas:< | ||
| + | @Directive({ | ||
| + | selector: ' | ||
| + | }) | ||
| - | == 4.4 procesos asíncronos | + | export class DestacadoDirective { |
| + | constructor( private el: ElementRef) { | ||
| + | const nativeElement | ||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | } | ||
| + | }</ | ||
| + | * **ElementRef** nos da acceso al elemento al cual se ha de aplicar la directiva (angular lo inyecta mediante el mecanismo de [[https:// | ||
| + | * aceptando parámetros desde el componente | ||
| + | import {Directive, ElementRef, Input, OnInit} from ' | ||
| + | @Directive({ | ||
| + | selector: ' | ||
| + | }) | ||
| - | == 4.5 Directivas personalizadas | + | export class DestacadoDirective implements OnInit { |
| + | @Input(' | ||
| + | constructor(private el: ElementRef) { } | ||
| + | ngOnInit(): void { | ||
| + | const nativeElement | ||
| + | nativeElement.style.fontSize | ||
| + | nativeElement.style.color = this.userColor || ' | ||
| + | nativeElement.style.textAlign = ' | ||
| + | nativeElement.style.border = '2px solid ' + (this.userColor || ' | ||
| + | } | ||
| + | } | ||
| + | </ | ||
| + | * usamos el decorador **@Input** para recibir el parámetro que recibimos desde el html:< | ||
| + | <div class=" | ||
| + | < | ||
| + | < | ||
| + | < | ||
| + | < | ||
| + | <div appDestacado> | ||
| + | <div [appDestacado]="' | ||
| + | </ | ||
| + | </ | ||
| + | === directiva estructural personalizada | ||
| + | <code bash>ng g[enerate] d[irective] directivas/ | ||
| + | * 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**) | ||
| + | * ejemplo:< | ||
| + | <div class=" | ||
| + | < | ||
| + | <hr> | ||
| + | < | ||
| + | < | ||
| + | <p *appMult=" | ||
| + | Saludos | ||
| + | </p> | ||
| + | </ | ||
| + | </ | ||
| + | <sxh typescript> | ||
| + | import { Directive } from ' | ||
| + | |||
| + | @Directive({ | ||
| + | selector: ' | ||
| + | }) | ||
| + | |||
| + | export class MultDirective { | ||
| + | |||
| + | constructor( | ||
| + | private templateRef: | ||
| + | private viewContainer: | ||
| + | |||
| + | @Input() set appMult(numero: | ||
| + | for (let i = 0; i < numero; i++) { | ||
| + | this.viewContainer.createEmbeddedView(this.templateRef); | ||
| + | } | ||
| + | } | ||
| + | } | ||
| + | } | ||
| + | </ | ||