Manejo de eventos Angular
Los eventos Angular se emiten como respuesta a las interacciones del usuario. Cuando se emite un evento Angular, se ejecuta su lógica de manejo de eventos. WPF proporciona eventos enrutados, eventos CLR y comandos. Mientras que en Angular, hay eventos DOM.
Aquí hay un ejemplo simple de cómo responde a un evento de clic de un botón en WPF:
<Button Click="Button_Click">Click Me</Button>
xml
private void Button_Click(object sender, RoutedEventArgs e)
{
Console.WriteLine("Hello World");
}
csharp
Lo mismo en Angular se vería así:
<button (click)="onClicked()">Click Me</button>
html
onClicked() {
console.log('Hello World');
}
typescript
En WPF estamos acostumbrados a obtener información sobre el evento, como el remitente y los argumentos del evento. En Angular podemos usar la variable $event
. Esta variable proporcionará información sobre el evento que se invocó.
<button (click)="onClicked($event)">Click Me</button>
html
onClicked(event) {
console.log(event.target);
}
typescript
A veces, pasar el objeto de evento puede no resultar muy útil. En su lugar, es posible que desees pasar el valor de una input
en la página.
<input #messageInput>
<button (click)="onClicked(messageInput.value)">Click Me</button>
html
onClicked(message) {
console.log(message);
}
typescript
Digamos que queremos imprimir el valor de una entrada al presionar Enter. Puedes hacerlo en Angular de la siguiente manera:
<input #messageInput (keyup)="onInputKeyup($event, messageInput.value)">
html
onInputKeyup(event, message) {
if (event.keyCode === 13) {
console.log(message);
}
}
typescript
Sorprendentemente, en Angular hay una forma aún más sencilla de hacerlo. Puedes vincularlo al pseudoevento keyup.enter
. Con este enfoque, el controlador de eventos se llamará solo cuando el usuario presione Enter.
<input #messageInput (keyup.enter)="onInputKeyup(messageInput.value)">
html
onInputKeyup(message) {
console.log(message);
}
typescript
Responder a eventos de un componente
En WPF, cuando crea sus propios controles personalizados, a menudo necesita extender o modificar algunos eventos base como este:
public class MyControl : Control
{
protected override void OnMouseDown(MouseButtonEventArgs e)
{
base.OnMouseDown(e);
// Place your custom logic here
}
}
csharp
En Angular, puedes lograr un resultado similar utilizando el decorador HostListener.
@Component({
selector: 'app-my-component',
templateUrl: './my.component.html',
styleUrls: ['./my.component.css']
})
export class MyComponent {
@HostListener('mousedown', ['$event'])
onMouseDown(event) {
// place your custom logic here
}
}
typescript
Crea tus propios eventos
A veces necesitas definir tus propios eventos. En WPF puede definir CLR o eventos enrutados. Echemos un vistazo a un ejemplo sencillo de un evento CLR en WPF:
public event EventHandler<TaskEventArgs> TaskCompleted;
...
this.TaskCompleted(this, new TaskEventArgs());
csharp
Para definir un evento personalizado en Angular, debes definir una propiedad EventEmitter marcada con el decorador Output.
@Output()
taskCompleted = new EventEmitter<TaskEventArgs>();
...
this.taskCompleted.emit(new TaskEventArgs());
typescript
Recursos adicionales
- De escritorio a web: cómo responder a eventos con la vinculación de eventos Angular
- Entrada de usuario Angular
- Interacción de componentes: el padre escucha los eventos del niño