我有一個觀察的 - loading$
- 輸出真正當我想顯示在UI加載覆蓋,並假當它的時間,以去除覆蓋。可見性由一個CSS類控制。角2:根外變化的DOM元素AppComponent
當可觀察發射真正,我想的CSS類添加到<body>
,並刪除它假。
HTML
<body class="">
<my-app>Angular app goes here</my-app>
</body>
正如你所看到的,<body>
是我Angular 2
應用程序之外,所以我不能使用屬性綁定更改類。這是我目前做的:
AppComponent.ts
loading$.subscribe(loading =>{
if(loading) document.querySelector('body').classList.add('loading');
else document.querySelector('body').classList.remove('loading');
});
這種運作良好。當loading$
觀測值發射時,loading
類被添加/刪除true/false。問題是我想在web worker中運行我的應用程序,這意味着無法訪問DOM。另外,Angular建議不要直接操縱DOM。
如何使用Angular
API更改<body>
?
Angular 2
,typescript 2
,rxjs 5 beta 12
PS:This question看起來很有希望,但關鍵的環節是死的。我也看到了幾個與Beta發行工作的建議,但現在已經過時(example)
角允許您更改[頁面標題](https://angular.io/docs/ts/latest/cookbook/set-document -title.html),當我們談論有關Angular的外部元素的訪問時。爲什麼從外部操縱DOM對你來說很重要?爲什麼不把它放在'my-app'中? – ktretyak
@ktretyak當'body'有'loading'類時,顯示一個加載覆蓋圖。 'index.html'默認將類設置爲ON。我希望網頁顯示這個加載覆蓋圖,直到它準備好用戶輸入爲止(直到加載了Angular根組件)。所以一旦組件加載,我使用'Angular'去除CSS類。同樣,當用戶離開組件時,我在'CanDeactivate'鉤子上啓用'loading',並在加載下一個路由時(在OnInit鉤子中)禁用它。 – BeetleJuice
您可以使根組件非常輕量級(如' router-outlet>'),並且在加載時不必等待。 –
ktretyak