如何加入 vue 2 中的 google 对象?
How to acced to google object in vue 2?
我正在尝试在我的 vue2 项目中使用 google 地图 API,但我尝试了一些失败的方法。在使用了 vue2googlemaps 模块和来自 google 的节点模块后,我决定直接使用 CDN 并将其添加到索引页面。我现在的问题是,要访问 google 对象,例如创建一个标记或类似的东西,我需要使用 this.marker = new window.google.maps.Marker()
例如,但是在我看到的教程中,每个人都使用直接 google 对象,从不使用 window
。我不明白为什么会这样。如果有人向我展示在 google.
上导入或使用此库的正确方法,我们将不胜感激
这是因为你的模板代码是在你的组件实例(a.k.a vm
)的范围内编译和执行的,而不是在全局范围内(a.k.a。window
) 范围。
要在您的模板中直接使用 google
,您可以添加以下计算:
computed: {
google: () => window.google
}
如果您的问题是没有在组件的 <script>
中定义 google
,一个简单的解决方案是将其作为 const
添加到顶部:
import Vue from 'vue';
const google = window.google;
export default Vue.extend({
computed: {
google: () => google // also make it available in template, as `google`
}
})
一个更优雅的解决方案是教 webpack 在任何组件中导入时从 window 对象中获取 google
:
vue.config.js
:
module.exports = {
configureWebpack: {
externals: {
google: 'window.google'
}
}
}
这会在您的 webpack 配置中创建一个 google
命名空间,因此您可以在任何组件中从中导入:
import google from 'google';
//...
computed: {
google: () => google // provide it to template, as `google`
}
为什么我说它更优雅?
因为它将组件与上下文分离,现在您不需要在不同上下文中使用时修改组件(即:在测试环境中,它甚至可能不使用浏览器,所以它可能没有 window
对象,而是一个 global
;在这种情况下,您所要做的就是在该环境中定义一个 google
名称空间,这就是您的组件将从中获取其 google
对象的地方; 但您不必调整或模拟任何组件的 methods/properties).
我正在尝试在我的 vue2 项目中使用 google 地图 API,但我尝试了一些失败的方法。在使用了 vue2googlemaps 模块和来自 google 的节点模块后,我决定直接使用 CDN 并将其添加到索引页面。我现在的问题是,要访问 google 对象,例如创建一个标记或类似的东西,我需要使用 this.marker = new window.google.maps.Marker()
例如,但是在我看到的教程中,每个人都使用直接 google 对象,从不使用 window
。我不明白为什么会这样。如果有人向我展示在 google.
这是因为你的模板代码是在你的组件实例(a.k.a vm
)的范围内编译和执行的,而不是在全局范围内(a.k.a。window
) 范围。
要在您的模板中直接使用 google
,您可以添加以下计算:
computed: {
google: () => window.google
}
如果您的问题是没有在组件的 <script>
中定义 google
,一个简单的解决方案是将其作为 const
添加到顶部:
import Vue from 'vue';
const google = window.google;
export default Vue.extend({
computed: {
google: () => google // also make it available in template, as `google`
}
})
一个更优雅的解决方案是教 webpack 在任何组件中导入时从 window 对象中获取 google
:
vue.config.js
:
module.exports = {
configureWebpack: {
externals: {
google: 'window.google'
}
}
}
这会在您的 webpack 配置中创建一个 google
命名空间,因此您可以在任何组件中从中导入:
import google from 'google';
//...
computed: {
google: () => google // provide it to template, as `google`
}
为什么我说它更优雅?
因为它将组件与上下文分离,现在您不需要在不同上下文中使用时修改组件(即:在测试环境中,它甚至可能不使用浏览器,所以它可能没有 window
对象,而是一个 global
;在这种情况下,您所要做的就是在该环境中定义一个 google
名称空间,这就是您的组件将从中获取其 google
对象的地方; 但您不必调整或模拟任何组件的 methods/properties).