在评估为true之后删除ngIf属性

时间:2016-08-04 10:24:11

标签: angular

有没有办法在将evIu属性evalauated为真后删除它?

示例,假设我有一个模板

<div class="container">
   <div *ngFor="let el of elements">
        <div *ngIf="el.index = index">
         ...
        </div>
   </div>
</div>

并且在组件中我有计数器

class Test implements onInit{
   index = 0;

   ngOnInit(){
     setInterval( () => index++ )
   }
}

这意味着只会显示一个div,但是我希望之前显示的所有div保持显示,换句话说,一旦被评估为true,就删除ngIf属性。

这样的事情可能吗?

由于

2 个答案:

答案 0 :(得分:2)

这是不可能的。您应该维护组件中的元素列表,以包含*ngFor应呈现的内容。

答案 1 :(得分:0)

您可以创建自己的ngIf:

@Directive( { selector : '[myNgIf]' } )
export class myNgIfDirective {
    private condition;

    constructor ( private templateRef : TemplateRef<any> ,
                  private viewContainer : ViewContainerRef ) {
    }

    @Input() set myNgIf ( condition : boolean ) {
        if ( this.condition !== true ) {
        // if this condition is once set to true , don't bother doing anything anymore 
            this.condition = condition;
            if ( condition ) {
                this.viewContainer.createEmbeddedView( this.templateRef );
            } else {
                this.viewContainer.clear();
            }
        }
    }
}

你可以使用它:

 <div *myNgIf ="isTrue">stuff</div>