I know this may sound strange to all of you but for some reason I don't know how to explain myself why this would work, I am probably missing something crucial.
So basically in angular-tour-of-heroes app, list of mock heroes is presented, you click on a hero inside of ngFor and selectedHero details is being shown.
Everything is fine because ngModel changes selectedHero variable inside typescript part as well as html part of the app.
But how can ngModel change 'hero' object inside ngFor loop? As I type in input field another hero name, the 'hero' from list from ngFor loop above changes as well. How does this work ?
Link: https://angular.io/tutorial/toh-pt2
heroes.component.html
<h2>My Heroes</h2>
<ul class="heroes">
<li *ngFor="let hero of heroes"
[class.selected]="hero === selectedHero"
(click)="onSelect(hero)">
<span class="badge">{{hero.id}}</span> {{hero.name}}
</li>
</ul>
<div *ngIf="selectedHero">
<h2>{{selectedHero.name | uppercase}} Details</h2>
<div><span>id: </span>{{selectedHero.id}}</div>
<div>
<label>name:
<input [(ngModel)]="selectedHero.name" placeholder="name"/>
</label>
</div>
</div>
heroes.component.ts
export class HeroesComponent implements OnInit {
heroes = HEROES
selectedHero: Hero;
onSelect(hero: Hero): void {
this.selectedHero = hero
console.log(this.selectedHero.name + ' here');
}
constructor() { }
ngOnInit(): void {
}
}