2017-03-08 30 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标记注入到构造函数中。 我正在寻找这种解决方案。这工作,但哈克。谢谢在任何情况下 –