Skip to content

Latest commit

 

History

History
53 lines (34 loc) · 2.83 KB

add_items.md

File metadata and controls

53 lines (34 loc) · 2.83 KB

Adicionando itens

Queremos adicionar itens à nossa lista. Com Angular podemos fazer isso facilmente e ver o item adicionado imediatamente. Vamos fazer isso dentro do inputComponent que criamos antes. Vamos mudá-lo assim, ao pressionar a tecla Enter ou clicar no botão enviar, o valor da caixa de entrada se tornará o título do novo item. E o novo item será adicionado à lista.

Mas não queremos que o componente todo-input seja responsável por adicionar um novo item para a lista. Queremos que ele tenha uma responsabilidade mínima, e delegue a ação em seu componente pai. Uma das vantagens desta abordagem é que este componente será reutilizável e pode ser anexado a uma ação diferente em diferentes situações.

Por exemplo, no seu caso, poderemos usar o inputComponent dentro de itemComponent. Então, teremos uma caixa de entrada para cada item e poderemos editar o título do item. Neste caso, pressionar a tecla Enter ou o botão Salvar terá um efeito diferente.

Então, o que realmente queremos fazer é emitir um evento do componente todo-input sempre que o título for alterado. Com o Angular, podemos facilmente definir e emitir eventos de nossos componentes!

@Output()

Dentro da classe inputComponent adicione a linha de código a seguir, que define uma saída para o componente.

@Output() submit: EventEmitter<string> = new EventEmitter();

A saída de propriedade será chamada de submit. Certifique-se de que Output e o EventEmitter foram adicionados à declaração de importação na primeira linha do arquivo:

import { Component, OnInit, Output, EventEmitter } from '@angular/core';

Agora, sempre que chamamos this.submit.emit() um evento será emitido para o componente pai. Vamos chamá-lo no método changeTitle:

changeTitle(newTitle: string): void {
  this.submit.emit(newTitle);
}

Delegamos tudo ao componente pai - mesmo que altere o título do item, se necessário. (O nome do método pode parecer irrelevante agora. Se você quiser, pode mudá-lo para algo mais apropriado, como submitValue. Lembre de mudar isso no template também.)

Passamos newTitle quando emitimos o evento. O que quer que possamos passar em emit () estará disponível para o pai como $ event.

Nada mais é alterado no componente todo-input. Os eventos emitidos por keyup.enter e click ainda chamam o mesmo método, mas o próprio método mudou.

Agora, tudo o que precisamos fazer é pegar o evento no componente principal e anexar lógica a ele. Vá para o componente app-root e vincule ao evento submit no componente <todo-input>:

<todo-input (submit)="addItem($event)"></todo-input>

Agora tudo é deixado para implementar o método addItem, que recebe uma string e adiciona-a à lista:

addItem(title: string): void {    
  this.todoList.push({ title });
}

Teste!