#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