1. Binding de Atributos
Como ya vimos, hacer attribute binding es una excepción. Es decir, es mejor cambiar las PROPIEDADES del DOM que los atributos HTML.
Solamente, deberemos utilizar attribute binding cuando NO EXISTA dicha propiedad del DOM disponible para ser cambiada.
Como ejemplos de estos atributos tenemos: ARIA, SVG, y "table span". Son atributos puros y no existen propiedades a las que se pueda hacer un bind.
Si queremos pues cambiar dichos atributos, no se pueden colocar directamente si no a través de prefijo att seguido de un punto (.) y el nombre del atributo. Veamos un ejemplo
<table border=1>
  <!--  expression calculates colspan=2 -->
  <tr><td [attr.colspan]="1 + 1">One-Two</td></tr>
  <!-- ERROR: There is no `colspan` property to set!
    <tr><td colspan="{{1 + 1}}">Three-Four</td></tr>
  -->
  <tr><td>Five</td><td>Six</td></tr>
</table>Aquí observamos que el texto entre comentarios que daría un error ya que NO encuentra la propiedad del DOM colspan.
Otro ejemplo vemos como cambiatr atributos de ARIA.
<!-- create and set an aria attribute for assistive technology -->
<button [attr.aria-label]="actionName">{{actionName}} with Aria</button>2. Binding de clases.
Podemos asignar clases de 2 maneras:
1. Asignando [class]="variable que guarda el nombre de la clase".
2. Asignando [class.nombreClase]="variable booleana que activa o desactiva"
En el primer caso asignamos un único valor de clase, resetando otros valores de clase asignados previamente, mientras que en el segundo caso, si la variable booleana toma el valor false, desasignamos dicha clase (y en caso contrario la asignamos).
Veamos el primer caso
<!-- reset/override all class names with a binding  -->
<div class="bad curly special"
     [class]="badCurly">Bad curly</div><!-- toggle the "special" class on/off with a property -->
<div [class.special]="isSpecial">The class binding is special</div>
<!-- binding to `class.special` trumps the class attribute -->
<div class="special"
     [class.special]="!isSpecial">This one is not so special</div>
3. Binding de estilos.
Se definen asignando [style.style.property]="expresión que devuelve un string"
Veamos ejemplos:
<button [style.color] = "isSpecial ? 'red': 'green'">Red</button>
<button [style.background-color]="canSave ? 'cyan': 'grey'" >Save</button><button [style.font-size.em]="isSpecial ? 3 : 1" >Big</button>
<button [style.font-size.%]="!isSpecial ? 150 : 50" >Small</button>4. Binding de eventos
Esta parte es un poco mas complicada. Aquí lo que se pretende es avisar al componente que se ha producido un evento, y la respuesta será ejecutar una función del componente.
Se pueden utilizar en principio 2 nomenclaturas:
1. (evento)="funcion_del_Componente() o expresión"
2. on-evento="funcion_del_Componente() o expresion"
Siendo evento, el nombre del evento del elemento del DOM principalmente, o de una directiva. En un botón sería "click".
Veamos los ejemplos:
<button (click)="onSave()">Save</button><button on-click="onSave()">On Save</button>
OJO: Angular mira primero si existe un evento con el mismo nombre de una directiva, y si lo encuentra le da prioridad. Se verá mas adelante.
4.1 $event
En un binding de evento, Angular establece un manejador de eventos (event handler) para el evento específico.Cuando salta el evento, se ejecuta una función del componente, pero la información relacionada con el evento se guarda en un objeto llamado $event.
Si el evento es un evento nativo del DOM, entonces $event será del tipo evento del DOM, peró si el evento es de una directiva, el objeto será del tipo que haya definido internamente la directiva.
Veamos un ejemplo del primer caso, donde se actualiza el firstname del Hero a medida que escribimos.
<input [value]="currentHero.firstName"
       (input)="currentHero.firstName=$event.target.value" >
4.2 Eventos personalizados con EventEmitter
Para crear un evento en un componente, este evento debe ser del tipo EventEmitter. A continuación hay que crear una función (que se hace referencia en el template) que contenga el método "emit" con un parámetro.En el ejemplo creamos un objeto deleteRequest del tipo EventEmitter<Hero>. Y el <Hero> determina el tipo de parametro a pasar al método emit.
// This component make a request but it can't actually delete a hero.
deleteRequest = new EventEmitter<Hero>();
delete() {
  this.deleteRequest.emit(this.hero);
}<button (click)="delete()">Delete</button><hero-detail (deleteRequest)="deleteHero($event)" [hero]="currentHero"></hero-detail> 
True, it is very struggling to even seal the first freelancing project. The developers, especially freshers like me at the Android application development, usually struggle more. Due to such freelancing portals' limitations, the confidence to work as a freelancer decreases eventually.
ResponderEliminarCan you please suggest some good recommendations for the same?