2017-03-08 78 views
0

訪問計算樣式要求我們調用下面的方法呼叫窗口的方法獲得導致安全地角2+

window.getComputedStyle(elementRef.nativeElement)

以上方法返回CssStyle對象,我們可以用它來訪問計算性能如通過CSS類/任何本機默認設置填充。

由於在我們嘗試在服務器端渲染時,程序可能無法正常工作,所以禁止AFAIK對全局/本地元素的角度調用方法。

我知道我們有Renderer調用本地元素上的方法,但方法簽名不返回任何結果(具有void返回類型)。

有沒有一種方法來安全地調用窗口上的方法&在Angular 2+中獲得結果?

+0

要麼不使用這些瀏覽器對象或不使用服務器端渲染或網絡工作者的特徵。或者,您可以使用DI根據執行代碼的平臺注入不同的抽象。我不知道如何配置它,因爲這在Dart中不可用,並且我沒有在TS中嘗試過。 –

+0

謝謝。看起來像我需要使用黑客來檢查給定的環境是否是瀏覽器 –

+0

應該有例子。也許檢查通用GitHub回購。到目前爲止我忽略了這個話題。 –

回答

0

你可以嘗試這樣的事情

declare let window: any; 
@Component({ 
    selector: 'some', 
    templateUrl: '<span>Content here</span>' 
}) 
export class SomeComponent implements OnInit { 
    ngOnInit(): void { 
     if(window && window.getComputedStyle){ 
      // do staff here 
     } 
    } 
} 
+0

如果窗口未定義,該怎麼辦? –

+0

@Kalinga查看編輯答案 – Ashot

+0

:)對不起,我沒有提出我的觀點。渲染器是爲了這個原因而創建的。您也可以以同樣的方式訪問文檔,但存在優雅的解決方案,例如將DOCUMENT標記注入到構造函數中。 我正在尋找這種解決方案。這工作,但哈克。謝謝在任何情況下 –