【问题标题】:How to access store context within a plugin in nuxt?如何在 nuxt 的插件中访问存储上下文?
【发布时间】:2018-10-03 09:43:02
【问题描述】:

我尝试添加第三方代码并在我的 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 的结果以及 store 对象。

第一个问题:为什么是现在打印?我根本没有调用它。

然后我单击按钮并收到错误消息:TypeError: Cannot read property 'store' of undefined

第二个问题:为什么我之前的日志出现这个错误?

感谢您的帮助

【问题讨论】:

    标签: vue.js nuxt.js


    【解决方案1】:

    第一个问题:为什么是现在打印?我根本没有调用它。

    因为 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,因此您可以访问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>
    

    希望它有效。

    【讨论】:

    • 它有效,我一开始是这样做的,但觉得这样通过商店有点奇怪。感谢您的帮助 sosmii
    猜你喜欢
    • 2020-04-17
    • 2021-06-27
    • 2020-05-29
    • 2019-04-17
    • 2021-04-14
    • 2020-05-20
    • 2019-12-23
    • 2021-06-17
    • 2021-08-07
    相关资源
    最近更新 更多