2016-08-04 65 views
0

如果刪除ngIf屬性後,如果刪除ngIf屬性爲true,是否有方法?將ngIf屬性評估爲true後移除ngIf屬性

例子,可以說,我有一個模板

<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之前顯示的內容保持顯示,換言之,刪除ngIf屬性後,將其評估爲true。

是這樣的可能嗎?

謝謝

回答

1

這是不可能的。您應該維護組件中的元素列表以包含*ngFor應呈現的內容。

+0

是否ATLEAST可能評估功能時ngIf解析爲真? – Darlyn

+0

您可以使用像http://stackoverflow.com/questions/36427670/angular2-calling-custom-function-after-ngswitch-new-view-is-created/36427769#36427769這樣的指令,但是您的要求看起來更像是針對Angular2而不是它(除非你正在使用jQuery小部件) –

+0

我通過傳遞函數來解決它,如果isViewed屬性爲true,則自動返回true。如果沒有,則檢查條件,如果條件爲真,則將其設置爲真 – Darlyn

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>