2017-03-02 49 views
0

我有一個使用Material Design Lite的angular2組件,但複選框(也可能是其他人)在第一次加載組件時沒有正確呈現,而如果我與複選框交互,mdl樣式已正確應用。在我的組件我有在生產代碼中使用setTimeout是否安全?

ngAfterViewInit() { 
    componentHandler.upgradeDom(); 
} 

,但不能解決我的問題,所以我用的setTimeout要執行的服務已經恢復了一些數據之後。這似乎工作,但它是否建議這樣做?

this.service.getDetails(this.id) 
      .finally(() => { 
       setTimeout(() => { 
        componentHandler.upgradeDom(); 
       }, 10); 
      }) 
      .subscribe((details) => { 
       this.details = details; 
      }); 
+0

它在那裏,所以它可以使用。它就在你想要使用的地方以及如何! – Smit

+0

也許你可以試試'changeDetection:ChangeDetectionStrategy.OnPush'.你可以在[Change Detection Explained]中找到一些有用的信息(https://blog.thoughtram.io/angular/2016/02/22/angular-2-change - 檢測 - explained.html) –

回答

0

不知道你的代碼的來龍去脈,單純從理論層面的引入競爭條件在哪裏(這是什麼都被延誤了)必須在10ms內完成。

你能否確認它會一直這樣做?如果你能(100%肯定)我會說沒關係。但是,從經驗來看,我會說遠離超時,而是儘可能使用事件。

請注意:我還沒有使用Angular 2,但我知道在Angular 1中,摘要有時需要手動觸發。這可能是這裏發生的事情。

1

如果您也將組件設置添加到問題中,這將有所幫助。查看angular.io文檔的組件樣式部分。我想你所需要的只是將選擇器和樣式添加到組件的註釋中。從文檔:

@Component({ 
    selector: 'hero-app', 
    template: ` 
     <h1>Tour of Heroes</h1> 
     <hero-app-main [hero]=hero></hero-app-main>`, 
    styles: ['h1 { font-weight: normal; }'] 
}) 
export class HeroAppComponent { 
    /* . . . */ 
} 
相關問題