Todo childcomponent.

De details van elk todo-item plaats je best in een childcomponent. Hierdoor blijft de code overzichtelijk en makkelijk onderhoudbaar.

Childcomponent aanmaken.

Hoofdcomponent aanpassen.

De childcomponent heeft als selector de naam app-todo-item gekregen. Voeg deze eerst aan de hoofdcomponent toe.

Lijn 3 zorgt ervoor dat elk object uit de array in een eigen childcomponent verschijnt.
Op lijn 4 geef je het volledig object door aan de childcomponent en op lijn 5 de index binnen de array.
Binnen de childcomponent lees je deze paramaters uit via de @Input decorator (@input() item: Todo en @Input index: number).

De site zal nu niet meer functioneren omdat de childcomponent de inputs nog niet kent!

Childcomponent aanpassen.

Op lijn 3 en lijn 4 krijg je de waardes van de hoofdcomponent binnen.

De template zal straks via string interpolation de titel van het item tonen. Voorzie eveneens een tekstveld met daarin dezelfde titel. Het tekstveld is default niet zichtbaar. zodra je dubbelklikt op de titel, zal de titel verdwijnen en wordt het tekstveld getoond. Vandaar dat we een extra eigenschap hideInputField voorzien.
Indien hideInputField = true toon dan enkel de tekst. Is hideInputField = false, toon dan enkel het tekstveld.

Net zoals in de hoofdcomponent moet je de todoService in de constuctor injecteren. (Lijn 7.)

Vergeet ook niet de Input (lijn 3 en 4), Todo (lijn 3 en 4) en de TodoService (lijn 7) bovenaan de pagina te importeren.

Verder hebben we nog drie methodes nodig.

Template aanpassen.

BELANGRIJK: de template genereert een fout omdat [(ngModel)] nog niet gekend is.
Importeer daarom eerst in src/app/todo/todo.module.ts de FormsModule en voeg deze toe aan de imports-array.


    

Het dynamisch gedeelte binnen de template is als volgt opgebouwd:

Opdracht

  1. Ook hier kan je het tekstveld leegmaken en verschijnt er een lege titel in de array.
    Pas de code aan zodat bij een leeg tekstveld het todo-item gewist wordt.
  2. Voeg aan todo-item.component.scss extra css-eigenschappen toe.
    Bij isDone = true wordt de tekst doorstreept.
    Wijzig de cursor van div.card-text in een pointer.