2016-07-31 15 views
1

Betrachten Sie dieses Bild Kind-Komponente:Hostbinding ngIf in Angular2

@Component({ 
    selector: 'mySelector', 
    template: `<ion-spinner [ngIf]="ngif"></ion-spinner>` 
}) 


export class MyDirective { 

    ngif: boolean; 
    constructor() {} 

    @Input() serverWaiting:boolean = true; 
    @HostBinding('ngIf') 

    ngOnChanges() { 
     this.ngif = !this.serverWaiting ? true : null; 
    } 

Die Hostkomponente der Vorlage:

<mySelector [serverWaiting]></mySelector> 

Die Host-Komponente:

@Component({ 
    templateUrl: 'hostComp.html', 
    directives: [myDirective] 
}) 

export class HostComp { 
    serverWaiting = true; 
} 

Doch der Spinner ist nicht gezeigt. Irgendeine Idee, was ich falsch mache?

Quellen: https://angular.io/docs/ts/latest/api/common/index/NgIf-directive.html

Antwort

4

Die @HostBinding('ngIf') Dekorateur vor dem Grundstück mit dem Wert sein muss, die gebunden werden sollen.

export class MyDirective { 
    constructor() {} 

    @HostBinding('ngIf') 
    ngif: boolean; 

    @Input() serverWaiting:boolean = true; 

    ngOnChanges() { 
     this.ngif = !this.serverWaiting ? true : null; 
    } 
} 

ist dieser Code nicht gültig sehen

<mySelector [serverWaiting]></mySelector> 

[serverWaiting] zeigt Eigenschaft bindend, aber keinen Wert binden. Dies weist true nicht zu, falls Sie das erwarten. Sie müssten

<mySelector [serverWaiting]="true"></mySelector> 
+0

Bei der Verwendung von '[ngIf] = "ngIf"', erhalte ich ein 'myDirective - Inline-Vorlage: 3: 12 ORIGINAL AUSNAHME: Kein Anbieter für TemplateRef'!. Mit '* ngIf' wird der Fehler behoben, aber der Spinner wird immer angezeigt. – nottinhill

+1

Das liegt wahrscheinlich daran, dass die Benennung einer Eigenschaft 'ngIf' eine schlechte Idee ist. Bitte verwenden Sie stattdessen einen anderen Namen. –

+2

Hi .. funktioniert jetzt sogar mit der Benennung der Direktive instance member 'ngIf'. Problem war Negation vor 'this.serverWaiting', das funktioniert:' this.ngif = this.serverWaiting? wahr: null; '. – nottinhill

Verwandte Themen