<div *ngIf="checkHere()">Check</div>

Hi all,

I’m new to Ionic 2 and I’m hoping if anyone is able to help or explain to me what’s going on.

When I include <div *ngIf="checkHere()">Check</div> on a page, the function checkHere() gets called multiple times. Is this a bug or I’ve done something wrong?

Thanks

The function get’s called whenever the template is evaluated. This was already an anti-pattern in Angular 1 where that function would have been called every digest loop.

To solve that and give you control when that get’s evaluated, so a solution might be

// Get's called every time a view is shown
ionViewDidEnter() {
  this.isChecked = this.checkHere();
}

and then in your template

<div *ngIf="isChecked">Check</div>

Check the NavController API Life Cycle events for more examples

1 Like

Thanks Vklinghammer. I thought it has something to do with the template being evaluated multiple times.

The suggestion works for a template page but It doesn’t for what i’m trying to do for a component template for a selector.

What I’m trying to achieve is to add a submenu in toolbar and a more button is shown whenever user is logged in and hidden otherwise.

<ion-navbar>
    <button menuToggle>
        <ion-icon name="menu"></ion-icon>
    </button>
    <ion-title >Dashboard</ion-title>
    <user-menu></user-menu>
 </ion-navbar>

Then in user-menu.html, i do check for user auth:

<ion-buttons end *ngIf="hasAuth">
      <button (click) = "showMenu($event)">
          <ion-icon name="more"></ion-icon>
      </button>
</ion-buttons>

In user-menu.ts, I ended up adding the checking code in the constructor:

constructor(private popoverCtrl: PopoverController) {      
  this.hasAuth = this.checkAuth();

}

Is there a more correct way of implementing a submenu in ionic 2?