GithubHelp home page GithubHelp logo

karinafukuda / todolist-angular Goto Github PK

View Code? Open in Web Editor NEW
2.0 1.0 0.0 272 KB

Todo-list feita sem o service para praticar os decorators @Input e @Output

JavaScript 6.26% TypeScript 58.19% HTML 15.48% CSS 20.07%

todolist-angular's Introduction

TODO_LIST

Uma lista de tarefas com:

  • Adicionar
  • Editar
  • Deletar
  • Completar
  • Contador de tarefas

Technologies

  • Angular 12
  • Typescript
  • HTML5
  • CSS3

todolist-angular's People

Contributors

karinafukuda avatar gabrielpaliari avatar

Stargazers

Alberto Barbosa 021 avatar Gustavo Batista avatar

Watchers

 avatar

todolist-angular's Issues

Considerações gerais sobre o projeto e de estilo

  1. Interessante que você colocou id para todos os elementos do HTML, mantenha essa prática pois isso facilita os testes. Dê uma olhada na documentação dos data attributes, pois para testes você pode utilizar por exemplo uma propriedade com o nome data-testid e depois remover isso para produção. https://developer.mozilla.org/en-US/docs/Learn/HTML/Howto/Use_data_attributes, https://betterprogramming.pub/decouple-tests-with-data-attributes-c920606c5f27
  2. Ficou bom o funcionamento da edição, criando um novo campo de input
  3. Achei interessante também o contador de tarefas registradas, uma funcionalidade que não estava no projeto inicial, mas deixou mais robusto o projeto. Desafio: ao invés de contar a length, conte cada vez que a tarefa for registrada, assim, quando o/a usuário/usuária deletar, o número não diminui.
  4. Faltou uma pequena margem (ex.: 10 px) entre os botões editar/deletar e cancelar/salvar

Criar componente de adicionar nova tarefa

<div class="form">
<input
#newItem
placeholder="Digite uma nova tarefa "
(keyup.enter)="addItem(newItem.value); newItem.value = ''"
class="lg-text-input"
id="addItemInput"
/>
<button class="btn-primary" (click)="addItem(newItem.value)">
Adicionar
</button>
</div>

Seria legal componentizar este componente de campo de texto e o botão de adicionar em um componente "AddTask" para ficar com uma arquitetura melhor. Assim o componente pai se responsabiliza apenas por gerenciar o array e não o input de usuárie

Ao adicionar um novo item, deixar a lógica concentrada na função "addItem"

<input
#newItem
placeholder="Digite uma nova tarefa "
(keyup.enter)="addItem(newItem.value); newItem.value = ''"
class="lg-text-input"
id="addItemInput"
/>

Na linha 8, tente deixar tudo dentro da função (retirando a parte depois do ponto e virgula e passando para o arquivo .ts). Para que a lógica fique concentrada em um único lugar, isso faz com que fique mais fácil corrigir bugs. Para isso você pode passar ao invés da descrição, a referência para o campo. Você pode ter dificuldade por conta dos tipos do typescript. Mas dê uma olhada nesse artigo sobre element ref (quando usamos o # no html criamos uma ElementRef): https://ultimatecourses.com/blog/element-refs-in-angular-templates

DRY - Dont Repeat Yourself

<button class="btn" (click)="editable = !editable">Editar</button>

<button class="btn btn-cancel" (click)="editable = !editable">

Cuidado para não se repetir. Quando perceber isso, crie uma função que encapsule a lógica, por mais que ela seja simples (ela pode mudar e vai ser mais difícil se tiver em vários lugares, podendo até gerar bugs). Pesquise o princípio e origem do acrônimo DRY, uma boa fonte é o livro Clean Code do Bob Martin.

Utilizar o dado do evento de output corretamente remove($event)

@Output() remove = new EventEmitter<Item>();
Perceba que aqui voce declarou que este emissor de eventos deveria receber um item
<button class="btn btn-warn" (click)="remove.emit()">Deletar</button>
Mas aqui você emitiu o evento vazio, e não utilizou o dado do evento no componente pai. O correto é voce emitir o item e no pai usar o $event para pegar os dados.
<app-item (remove)="remove(item)" [item]="item"></app-item>
Note que você não usou dado nenhum do evento, você apenas usou o item do ng-for.
Ficaria assim no componente pai:
<app-item (remove)="remove($event)" [item]="item"></app-item>
Você pode fazer da forma que você fez, mas fica mais claro desta outra forma dado os tipos que você estabeleceu.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.