2016-07-31 4 views
1

Рассмотрим этот ребенок компонент:Hostbinding ngIf в 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; 
    } 

Хост шаблона компонента:

<mySelector [serverWaiting]></mySelector> 

Хост Компонент:

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

export class HostComp { 
    serverWaiting = true; 
} 

Тем не менее, Spinner не показан. Любая идея, что я делаю неправильно?

Источники: https://angular.io/docs/ts/latest/api/common/index/NgIf-directive.html

ответ

4

@HostBinding('ngIf') декоратор должен быть перед собственности с величиной, которая должна быть связана.

export class MyDirective { 
    constructor() {} 

    @HostBinding('ngIf') 
    ngif: boolean; 

    @Input() serverWaiting:boolean = true; 

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

Этот код не выглядит действительным

<mySelector [serverWaiting]></mySelector> 

[serverWaiting] указывает свойство связывания, но не связывает значение. Это не присваивает true в случае, если вы этого ожидаете. Вы должны были бы

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

При использовании '[ngIf] = "ngIf"', я получаю 'myDirective - встроенный шаблон: 3: 12 ORIGINAL ИСКЛЮЧЕНИЕ: Нет поставщика для TemplateRef'!. Использование '* ngIf' избавляет от ошибки, но все равно показывается счетчик. – nottinhill

+1

Это, вероятно, потому, что имя свойства 'ngIf' - плохая идея. Вместо этого используйте другое имя. –

+2

Привет, теперь работает даже с именем элемента экземпляра директивы 'ngIf'. Проблема была отрицанием до 'this.serverWaiting', такие работы:' this.ngif = this.serverWaiting? true: null; '. – nottinhill

Смежные вопросы