如何在 nuxt 的插件中访问商店上下文?
How to access store context within a plugin in nuxt?
我尝试添加第三方代码并在我的 Nuxt 应用程序中使用它。基本上我在 @/plugins/vendorCode/logFn.js
下写了一个插件,其中包含一个哑函数:
export default ({ store }) => {
console.log('store is', store)
}
如您所见,我尝试访问商店并稍后执行一些修改。那是我的下一步。
但现在我卡住了。
在我的 Vue 组件中,我有一个调用 logFn 的按钮,这是我所做的:
<script>
import logFn from '@/plugins/vendorCode/logFn.js'
export default {
methods: {
onClick () {
logFn()
}
}
}
</script>
到目前为止一切顺利。页面重新加载后,我可以在控制台中看到我的 logFn 结果以及存储对象。
第一个问题:为什么现在打印?我根本没有调用它。
然后我点击按钮并得到一个错误:TypeError: Cannot read property 'store' of undefined
。
第二个问题:为什么我之前的日志会出现这个错误?
感谢您的帮助
第一个问题:为什么现在打印?我根本没有调用它。
因为 Nuxt 会为您调用它。
在实例化根 vue.js 应用程序之前,Nuxt 会调用 ./plugins 文件夹中的每个 .js 文件。
https://nuxtjs.org/guide/plugins
如果你想使用logFn.js
作为一个实用函数什么的,你应该把它放在./assets或者创建你自己的util文件夹。
第二个问题:为什么我之前的日志会出现这个错误?
因为你没有传递所需的参数。
如果像下面这样写,可能更容易定位原因。
您的代码等于:
export default function (context) {
console.log('store is', context.store)
}
该函数需要一个参数。
当 Nuxt 调用它时,Nuxt 给它 context, so you can access store.
当您在页面中调用该函数时,您没有传递必需的参数,因此发生了错误。
那你该怎么办?
创建~/assets/js/logFn.js
.
export default (store) => { // <- not { store }, but store
console.log('store is', store)
}
在你的 page.vue
中这样称呼它
<script>
import logFn from '~/assets/js/logFn.js'
export default {
methods: {
onClick () {
logFn(this.$store)
}
}
}
</script>
希望有用。
我尝试添加第三方代码并在我的 Nuxt 应用程序中使用它。基本上我在 @/plugins/vendorCode/logFn.js
下写了一个插件,其中包含一个哑函数:
export default ({ store }) => {
console.log('store is', store)
}
如您所见,我尝试访问商店并稍后执行一些修改。那是我的下一步。 但现在我卡住了。
在我的 Vue 组件中,我有一个调用 logFn 的按钮,这是我所做的:
<script>
import logFn from '@/plugins/vendorCode/logFn.js'
export default {
methods: {
onClick () {
logFn()
}
}
}
</script>
到目前为止一切顺利。页面重新加载后,我可以在控制台中看到我的 logFn 结果以及存储对象。
第一个问题:为什么现在打印?我根本没有调用它。
然后我点击按钮并得到一个错误:TypeError: Cannot read property 'store' of undefined
。
第二个问题:为什么我之前的日志会出现这个错误?
感谢您的帮助
第一个问题:为什么现在打印?我根本没有调用它。
因为 Nuxt 会为您调用它。
在实例化根 vue.js 应用程序之前,Nuxt 会调用 ./plugins 文件夹中的每个 .js 文件。
https://nuxtjs.org/guide/plugins
如果你想使用logFn.js
作为一个实用函数什么的,你应该把它放在./assets或者创建你自己的util文件夹。
第二个问题:为什么我之前的日志会出现这个错误?
因为你没有传递所需的参数。
如果像下面这样写,可能更容易定位原因。
您的代码等于:
export default function (context) {
console.log('store is', context.store)
}
该函数需要一个参数。
当 Nuxt 调用它时,Nuxt 给它 context, so you can access store.
当您在页面中调用该函数时,您没有传递必需的参数,因此发生了错误。
那你该怎么办?
创建~/assets/js/logFn.js
.
export default (store) => { // <- not { store }, but store
console.log('store is', store)
}
在你的 page.vue
<script>
import logFn from '~/assets/js/logFn.js'
export default {
methods: {
onClick () {
logFn(this.$store)
}
}
}
</script>
希望有用。