#7: š¤ VinculaĆ§Ć£o de eventos
Queremos que nossa aplicaĆ§Ć£o reaja Ć s aƧƵes do usuĆ”rio. Queremos atualizar o tĆtulo do item de nossa lista toda vez que o usuĆ”rio trocar o nome, ou adicionar um novo item quando o usuĆ”rio aperta o botĆ£o de Salvar ou a tecla Enter.
NĆ³s ainda nĆ£o temos uma lista inteira para mostrar, mas no momento iremos usar outra maneira de testar a aĆ§Ć£o. NĆ³s iremos mudar para a funcionalidade correta mais tarde.
O componente input-button-unit
deve se parecer com:
AĆ§Ć£o
Primeiro, vamos implementar a funĆ§Ć£o changeTitle
. Ela receberĆ” o novo tĆtulo como argumento. SĆ£o melhores prĆ”ticas ter nossos metodos customizados escritos apĆ³s metodos de ciclo de vida (ngOnInit
neste caso).
Ligando os Eventos
Assim como ligar propriedades de um elemento, nĆ³s podemos ligar eventos que sĆ£o emitidos por outros elementos. Novamente, o Angular nos dĆ” uma maneira bem simples de fazer isso. VocĆŖ sĆ³ coloca o nome do evento entre parĆŖntesis e passa o evento no mĆ©todo que deve ser executado quando o evento for emitido.
Vamos tentar com um exemplo simples, onde o tĆtulo estĆ” mudando quando o usuĆ”rio clica no botĆ£o. Note que existe um parĆŖntesis em volta do click
. (NĆ³s tambĆ©m trocamos a ligaĆ§Ć£o do input de volta para o valor title
.)
O evento tem nome de
click
e nĆ£oonClick
- em Angular vocĆŖ remove o prefixoon
dos eventos nos elementos.
VĆ” para o navegador e veja o resultado - clique no botĆ£o Save.
Dados do Evento
Passamos uma string estƔtica no mƩtodo chamada de: Button Clicked!
. Mas queremos passar o valor que o usuƔrio digitou na caixa de input!
No prĆ³ximo capĆtulo iremos aprender como usar as propriedades de um elemento em outro elemento no mesmo template. Depois, seremos capazes de completar a implementaĆ§Ć£o do evento click no botĆ£o Save. Mas agora nĆ³s ligaremos um mĆ©todo em um evento no input: quando o usuĆ”rio apertar Enter, o mĆ©todo changeTitle
serĆ” chamado.
Evento 'keyup'
Quando o usuĆ”rio digita, eventos do teclado sĆ£o emitidos. Por exemplo, keydown
e keyup
. NĆ³s iremos usar o evento keyup
(quando a tecla pressionada Ć© solta) e trocar o tĆtulo:
Agora, quando o usuĆ”rio digitar na caixa de input, o tĆtulo muda para "Button Clicked!". Mas continua uma string estĆ”tica.
Dica: Quando um elemento comeƧar a ficar grande devido aos atributos, para melhorar a visualizaĆ§Ć£o, vocĆŖ pode dividir em duas linhas:
O objeto $evento
Agora sĆ³ queremos reagir quando o evento keyup
ocorre. O Angular permite que nĆ³s utilizemos o prĆ³prio objeto do evento. Ele Ć© passado pela ligaĆ§Ć£o com o evento como $event
- assim nĆ³s podemos utilizĆ”-lo quando chamamos changeTitle()
.
O objeto do evento emitido nos eventos keyup
tem uma referĆŖncia ao elemento que emite o evento - o elemento de input. A referĆŖncia Ć© guardada numa propriedade do evento, chamada target
. Como vimos anteriormente, o elemento de input tem uma propriedade value
que segura a string que estĆ” no input. NĆ³s podemos passar $event.target.value
para o mƩtodo:
Teste em seu navegador. Agora, com cada tecla apertada, vocĆŖ consegue ver as mudanƧas no tĆtulo e elas refletem o valor do input.
Apertando a tecla Enter
VocĆŖ pode limitar a mudanƧa a um clique de tecla, em seu caso Ć© o Enter. Angular deixa tudo bem mais fĆ”cil pra nĆ³s. O evento keyup
tem propriedades que sĆ£o eventos mais especĆficos. EntĆ£o, adicione o nome da tecla que seu evento escutarĆ”:
Agora o tĆtulo irĆ” mudar apenas quando o usuĆ”rio apertar a tecla Enter enquanto digita no input.
Explore o $event
VocĆŖ pode mudar o mĆ©todo changeTitle para registrar o objeto
$event
no console. Dessa forma vocĆŖ pode explorar e ver quais propriedades ele tem.
Mude o mƩtodo para changeTitle
:
Agora, mude o argumento que vocĆŖ estĆ” passando, altere-o para passar o $event
:
Teste!
NĆ£o esqueƧa de voltar para o cĆ³digo anterior, antes de continuarmos o tutorial!
Last updated