Aprende a controlar el estado de un botón con property binding en Angular: desde HTML hacia TypeScript, usando corchetes, la propiedad disabled y una actualización diferida con setTimeout. Este guía práctica muestra la diferencia con string interpolation, cómo usar una variable como listo y por qué el constructor de la clase es clave para inicializar comportamientos.
¿Qué es property binding en Angular y por qué importa?
El data binding conecta el código de TypeScript con el HTML. Ya se vio string interpolation (comunicación de TypeScript a HTML). Ahora, el property binding trabaja en la otra dirección: desde HTML hacia TypeScript, permitiendo enlazar propiedades del DOM con expresiones de TypeScript.
Usa corchetes para enlazar: [propiedad]="expresión".
Funciona con propiedades nativas como disabled en un botón.
Acepta expresiones de TypeScript: true, false, variables o funciones.
¿Cómo se escribe la sintaxis con corchetes en HTML?
Ejemplo básico con un botón y disabled:
<button[disabled]="true">click me</button>
Con true: el botón aparece en gris y no responde a clics.
Con false: el botón es cliqueable y cambia de color al presionarlo.
¿Cómo controlar disabled con una variable y expresiones en TypeScript?
Puedes enlazar disabled a una variable para reflejar el estado de la aplicación. Se usa una variable llamada listo que determina si el botón debe habilitarse.
listo =true;// o false según el estado inicial
<button[disabled]="!listo">click me</button>
listo = true: con [disabled]="!listo" el botón queda habilitado.
listo = false: el botón se deshabilita hasta que cambie el estado.
También puedes pasar una función completa en la expresión si lo necesitas.
¿Qué expresión usar: variable o función?
Variable simple: rápida y clara para estados binarios (true/false).
Expresión con negación: !listo para invertir el estado sin lógica extra.
Función: útil si la habilitación depende de varias condiciones.
¿Cómo simular cambios con constructor, setTimeout y arrow function?
Para simular que el servidor tarda en responder, se declara listo en false y se cambia a true tras 3 segundos usando el constructor de la clase con setTimeout. El constructor se ejecuta al cargarse la clase, ideal para inicializar comportamientos.
listo =false;constructor(){setTimeout(()=>{this.listo=true;},3000);// 3000 ms = 3 segundos}
setTimeout: espera un tiempo antes de ejecutar una función.
Primer parámetro: función anónima con arrow function() => {}.
Segundo parámetro: milisegundos a esperar (por ejemplo, 3000).
this: referencia a la instancia de la clase; así se actualiza listo correctamente.
Con esto, el botón inicia deshabilitado y se habilita después de 3 segundos, mostrando en práctica cómo property binding refleja cambios de estado en la interfaz.
¿Te gustaría ver más ejemplos con eventos y acciones del usuario? Deja tus preguntas y comenta qué casos quieres practicar.
Si, exactamente es lo que queremos promover, que no te cases con una única herramienta de trabajo, prueba con varias y especializate en la que mas te guste y te convenga e acuerdo al proyecto en el que estés trabajando 😄
Hola Mons!
Piensa las “Clases” como un espacio de memoria que contiene información descriptiva de algo determinado.
Por ejemplo una clase llamada “perro” puede tener variables como edad, nombre, altura, entre otras que pueden describir un perro. Además, la clase puede tener funciones dentro de ella que describan el comportamiento del mismo (perro), como por ejemplo ladrar().
Los constructores son elementos que permiten describir como se construirán objetos que hagan instancia de una clase. Por ejemplo, la lógica detrás de cada vez que alguien quiera crear un nuevo perro estará comprendida dentro de su o sus constructores.
En el ejemplo que señalas, la función es declarada fuera del constructor pero dentro de la clase, lo que permite hacer referencia a ella posteriormente con el data binding del elemento botón. Saludos!
Creo que el ejemplo no es ilustrativo de la teoria
Property Binding: TS <= HTML
Lo que ilustró el ejemplo es que dependiendo del valor de listo cambiaba el HTML y debió ser que dependiendo del valor de una propiedad del control HTML se hiciera un proceso o cambio en TS
Creo con todo respecto que está mal teoría, debería ser:
El modelo cambia a la vista, es decir: TypeScript cambia el valor de una propiedad de un elemento del DOM (HTML)
Leyendo la documentación de Angular tampoco esta muy claro.
“Property binding simply means you’re passing data from the component class and setting the value of a given element in the view. Property binding is one way, in that the data is transferred from the component to the class.
The benefit of property binding is that it allows you to control element property values from the component and change them whenever needed.”
En el ejemplo entiendo lo que hace, pero no veo la via HTML=>TS
Conclusion
Property binding allows you to define element attribute values from the component class.
It is one-way data binding, as you can only set data from the component to the view.
???
Me queda claro el Property Binding. Pero creo que el flujo de valores no es Typescript <= HTML, sigue siendo Typescript => HTML. La diferencia con el String Interpolation es que se maneja el comportamiento de una “propiedad” del elemento DOM HTML dependiendo del valor que venga del Typescript.
Si, justamente estaba pensando que podía haber hecho lo mismo con el ´´String Interpolation´´ .
Esperaba más algo como recibir información del DOM y guardarla en una variable.
To también me sumo a tu opinion. Incluso note que la en explicación pone: Event Binding: [] cuando en realidad sería: Event Binding: () ya que los paréntesis cuadrados son usados por el Property Binding.
Entonces, el property binding nos sirve para ligar la class con las propiedades de los objetos del DOM, y el string interpolation solo nos sirve para pasar datos del class al html.
Aquí más bien y entiendo que el html se modifica según cambia el código del componente en Typescript, no que el HTML modifique los modelos de TypeScript. Lo comento porque la descripción dice “Property binding es la comunicación desde HTML hacia TypeScript.” y se podría entender lo contrario.
Amigo, cuando declaras una propiedad entre [] es un tipo de comunicación entre HTML y TypeScript, no sé si me entiendas, pero las etiquetas HTML vas asi: class="", van sin corchetes.
El property binding se refiere a la accion de conectar desde el Html con propiedades o comportamientos que se encuentran en el TypeScript.
Importante tambien notar el concepto del constructor de la clase, como vamos a usarlo y la implementacion de funciones anonimas o Lambdas.
Hice un ejemplo que en vez de cambiar el valor de listo en el constructor este se modifique en una función
import{Component}from'@angular/core';@Component({selector:'app-root',templateUrl:'./app.component.html',styleUrls:['./app.component.css']})exportclassAppComponent{ title ='Platzi Square'; a =3; b =5; listo =false;constructor(){}cambiarValor(){// Funcion anonima de javascriptsetTimeout(()=>{this.listo=true;},3000);returnthis.listo;}}