2017-10-19 124 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, 
相關問題