vue.js - 如何在nuxt的插件中访问存储上下文?

标签 vue.js nuxt.js

我尝试添加第三方代码并在我的 Nuxt 应用程序中使用它。基本上我在@/plugins/vendorCode/logFn.js下写了一个插件其中包含一个哑函数:

export default ({ store }) => {
    console.log('store is', store)
}

如您所见,我尝试访问 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 .

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

感谢您的帮助

最佳答案

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

因为 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>

希望它有效。

关于vue.js - 如何在nuxt的插件中访问存储上下文?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52624166/

相关文章:

javascript - 将 Access-Control-Allow-Origin header 添加到 vuejs CLI webpack 服务器

vue.js - 如何使用 v-model 绑定(bind)解码 HTML 实体‽

vue.js - 如何访问asyncData中的Vue.prototype?

nuxt.js - 如何在Nuxt中添加 "text/javascript"到<head>

vue.js - nuxt.js - 如何在服务器端为所有客户端缓存 axios 调用

css - 在 Nuxt 元素中自定义 bootstrap-vue

javascript - Laravel 5.3 和 Vue 2

vue.js - vue如何从子组件访问v-model

javascript - 类型错误 : Cannot read property '$auth' of undefined Vuejs

vue.js - Vue渲染对象数组