Daniyal Javaid
Daniyal Javaid

Reputation: 1636

Using *ngIf with a dynamic variable in Angular 2

I was following this example : Angular2.io Example.

When selectedHero is null the div element should not be displayed, that works fine, but when I select a hero using click event and selectedHero is not null, the div element is still not displayed.

I have tried using boolean variable too but after changing click event the variable is updated but the div element is still not displayed.

  <ul>
    <li *ngFor='let hero of myHeroes' (click)="onSel(hero)">
      <div><label>id: </label>{{hero.id}}</div>
      <div><label>Name: </label>{{hero.name}}</div>
    </li>
  </ul>
</div>
<div *ngIf="selectedHero">
  <h2>{{selectedHero.name}} details!</h2>
  <div><label>id: </label>{{selectedHero.id}}</div>
  <div>
    <label>name: </label>
    <input [(ngModel)]="selectedHero.name" placeholder="name" />
  </div>

This is the component code :

export class AppComponent {
  title = 'Tour of heroes!';
  selectedHero: Hero;
  HeroesList: Hero[] = [//can also be used to display 
    { id: 11, name: 'Mr. Nice' },
    { id: 12, name: 'Narco' },
    { id: 13, name: 'Bombasto' },
    { id: 14, name: 'Celeritas' },
    { id: 15, name: 'Magneta' },
    { id: 16, name: 'RubberMan' },
    { id: 17, name: 'Dynama' },
    { id: 18, name: 'Dr IQ' },
    { id: 19, name: 'Magma' },
    { id: 20, name: 'Tornado' }
  ];

  onSel(shero: Hero): void {
    this.selectedHero = shero;
    // alert(this.selectedHero.name);
  }
}

export class Hero {
  id: number;
  name: string;
}

Upvotes: 1

Views: 7920

Answers (2)

Roman C
Roman C

Reputation: 1

You missing some imports from@angular/core where ngIf is defined

see plunk

The reason that ngIf is not working is that created content is not valid html.

Upvotes: 1

Daniyal Javaid
Daniyal Javaid

Reputation: 1636

The problem was in template, ul element was to be within div , else the code was not working , let me know the reason for this, Thanks.

    <div>
      <ul>
        <li *ngFor='let hero of myHeroes' (click)="onSel(hero)">
          <div><label>id: </label>{{hero.id}}</div>
          <div><label>Name: </label>{{hero.name}}</div>
        </li>
      </ul>
    </div>

<div *ngIf="selectedHero">
  <h2>{{selectedHero.name}} details!</h2>
  <div><label>id: </label>{{selectedHero.id}}</div>
  <div>
    <label>name: </label>
    <input [(ngModel)]="selectedHero.name" placeholder="name" />
  </div>
</div>

Upvotes: 0

Related Questions