2017-10-19 83 views
0

我采用了棱角分明CLI +环球和我有一样的窗口,$ jQuery和谷歌等浏览器的变量问题..

我试着用这样的WebPack解决:

plugins: [ 
    new webpack.DefinePlugin({ 
     window: undefined, 
     document: undefined, 
     location: JSON.stringify({ 
      protocol: 'https', 
      host: 'localhost', 
     }) 
    }), 
    new webpack.ProvidePlugin({ 
     $: "jquery", 
     jQuery: "jquery", 
     "window.jQuery": "jquery" 
    }) 

] 

我在例如组件下面的代码:

window.location.reload() 

这是行不通的。 另外,我在我的node_modules中使用了窗口变量。

我该如何解决这个问题?

回答

0

这些变量不可用在服务器端。如果你想在你的代码中使用它们,你需要检查,如果当前上下文是基于浏览器或服务器:

import { PLATFORM_ID } from '@angular/core'; 
import { isPlatformBrowser, isPlatformServer } from '@angular/common'; 

constructor(@Inject(PLATFORM_ID) private platformId: Object) { ... } 

ngOnInit() { 
    if (isPlatformBrowser(this.platformId)) { 
    // Client only code. 
    ... 
    } 
} 
+0

是,使用这种技术,你可以只conditionaly在浏览器中,他们都可以使用它们。 –

+0

好吧,现在我在后端得到以下错误为GET请求丢弃实体正文 –

+0

听起来就像你试图做一些有效载荷的GET请求 - 这是不允许的。 –

0

这只是对new webpack.ProvidePlugin如何工作的误解。它所做的只是将这些项目导入打包文件,而不是将它们暴露为可随意从浏览器控制台访问的变量。

如果您希望从外部访问这些项目,我会建议您在application.js或无论您的入门文件是

import jquery from 'jquery' 

window.$ = jquery 
window.jquery = jquery 
window.jQuery = jquery 

这样做应该允许您访问浏览器控制台上的jquery。 作为窗口的组件中是从人迹罕至,也许下面的代码有什么用它做

window: undefined, 
document: undefined, 
相关问题