From 045ebd07a7cbbc70726f5b60c16d51f6b722a482 Mon Sep 17 00:00:00 2001 From: kiwi <kiwi@chezmoi.earth> Date: Mon, 17 Mar 2025 19:13:53 +0100 Subject: [PATCH] add onclick and ngif --- .../src/app/heroes/heroes.component.html | 13 +++- .../src/app/heroes/heroes.component.scss | 66 +++++++++++++++++++ .../src/app/heroes/heroes.component.ts | 8 ++- 3 files changed, 83 insertions(+), 4 deletions(-) diff --git a/angular-tour-of-heroes/src/app/heroes/heroes.component.html b/angular-tour-of-heroes/src/app/heroes/heroes.component.html index 5c5084d..7450040 100644 --- a/angular-tour-of-heroes/src/app/heroes/heroes.component.html +++ b/angular-tour-of-heroes/src/app/heroes/heroes.component.html @@ -9,9 +9,18 @@ <h2>My Heroes</h2> <ul class="heroes"> <li *ngFor="let hero of heroes"> - <button type="button"> + <button [class.selected]="hero === selectedHero" type="button" (click)="onSelect(hero)"> <span class="badge">{{hero.id}}</span> <span class="name">{{hero.name}}</span> </button> </li> -</ul> \ No newline at end of file +</ul> + +<div *ngIf="selectedHero"> + <h2>{{selectedHero.name}} Details</h2> + <div>id: {{selectedHero.id}}</div> + <div> + <label for="hero-name">Hero name: </label> + <input id="hero-name" [(ngModel)]="selectedHero.name" placeholder="name"> + </div> +</div> \ No newline at end of file diff --git a/angular-tour-of-heroes/src/app/heroes/heroes.component.scss b/angular-tour-of-heroes/src/app/heroes/heroes.component.scss index e69de29..9b8b843 100644 --- a/angular-tour-of-heroes/src/app/heroes/heroes.component.scss +++ b/angular-tour-of-heroes/src/app/heroes/heroes.component.scss @@ -0,0 +1,66 @@ +/* HeroesComponent's private CSS styles */ +.heroes { + margin: 0 0 2em 0; + list-style-type: none; + padding: 0; + width: 15em; +} + +.heroes li { + display: flex; +} + +.heroes button { + flex: 1; + cursor: pointer; + position: relative; + left: 0; + background-color: #EEE; + margin: .5em; + padding: 0; + border-radius: 4px; + display: flex; + align-items: stretch; + height: 1.8em; +} + +.heroes button:hover { + color: #2c3a41; + background-color: #e6e6e6; + left: .1em; +} + +.heroes button:active { + background-color: #525252; + color: #fafafa; +} + +.heroes button.selected { + background-color: black; + color: white; +} + +.heroes button.selected:hover { + background-color: #505050; + color: white; +} + +.heroes button.selected:active { + background-color: black; + color: white; +} + +.heroes .badge { + display: inline-block; + font-size: small; + color: white; + padding: 0.8em 0.7em 0 0.7em; + background-color: #405061; + line-height: 1em; + margin-right: .8em; + border-radius: 4px 0 0 4px; +} + +.heroes .name { + align-self: center; +} \ No newline at end of file diff --git a/angular-tour-of-heroes/src/app/heroes/heroes.component.ts b/angular-tour-of-heroes/src/app/heroes/heroes.component.ts index 98651ad..276de05 100644 --- a/angular-tour-of-heroes/src/app/heroes/heroes.component.ts +++ b/angular-tour-of-heroes/src/app/heroes/heroes.component.ts @@ -1,13 +1,13 @@ import { Component } from '@angular/core'; import { FormsModule } from '@angular/forms'; -import { NgFor } from '@angular/common'; +import { NgFor, NgIf } from '@angular/common'; import { Hero } from '../hero' import { HEROES } from '../mock-heroes'; @Component({ selector: 'app-heroes', - imports: [FormsModule, NgFor], + imports: [FormsModule, NgFor, NgIf], templateUrl: './heroes.component.html', styleUrl: './heroes.component.scss' }) @@ -17,4 +17,8 @@ export class HeroesComponent { name: 'Windstorm' }; heroes = HEROES; + selectedHero?: Hero; + onSelect(hero: Hero): void { + this.selectedHero = hero; + } }