窗口,$,谷歌未定义

时间:2017-10-19 15:35:46

标签: javascript typescript webpack angular-universal

我正在使用Angular CLI + Universal,我遇到浏览器变量问题,如window,$ Jquery和google等。

我尝试用这样的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中使用了window变量。

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:0)

这只是对Worksheet.Range如何运作的误解。它的作用是简单地为你打包这些项目的打包文件,而不是将它们公开为你可以随时从浏览器控制台访问的变量

如果您希望从外部访问这些内容,我建议您在new webpack.ProvidePlugin或您的输入文件中执行此操作

application.js

执行此操作应该允许您在浏览器的控制台上访问jquery。 至于窗口是从组件内部无法访问的,也许下面的代码与它有关

import jquery from 'jquery'

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

答案 1 :(得分:0)

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

// import functions
import org.apache.spark.sql.functions.{coalesce, lit}

// we might not need groupBy, 
// since after join, all the information will be in the same row
// so instead of using aggregate function, we simply combine the related fields as a new column.
val df = hist2.join(hist1, Seq("article_id", "pos_id"), "left")
  .select($"pos_id", $"article_id",
    coalesce(hist2("date"), hist1("date")).alias("date"),
    (coalesce(hist2("qte"), lit(0)) + coalesce(hist1("qte"), lit(0))).alias("qte"),
    (coalesce(hist2("ca"), lit(0)) + coalesce(hist1("ca"), lit(0))).alias("ca"))
  .orderBy("pos_id", "article_id")

// df.show()
|pos_id|article_id|      date| qte|  ca|
+------+----------+----------+----+----+
|     1|         1|2000-01-08| 5.0| 7.0|
|     2|         2|2000-01-08|29.4|24.0|
|     3|         3|2000-01-08| 7.0| 2.4|
|     4|         4|2000-01-08| 3.5| 1.2|
|     5|         5|2000-01-08|14.5| 1.2|
|     6|         6|2000-01-08| 2.0|1.25|
+------+----------+----------+----+----+