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 2 zorgt ervoor dat elk object uit de array in een eigen childcomponent verschijnt.
Op lijn 6 geef je het volledig object door aan de childcomponent en op lijn 7 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 sting 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 we 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.)

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 FormModule 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 leeg maken en verschijnt er een lege titel in de array.
    Pas de code aan zodat je nooit lege velden kan krijgen.
  2. Voeg aan todo-item.component.ts extra css-eigenschappen toe.
    Bij isDone = true wordt de tekst doorstreept.
    Wijzig de cursor van div.card-text in een pointer.