【问题标题】:Best practice to call a plugin on every page in Nuxt.js在 Nuxt.js 的每个页面上调用插件的最佳实践
【发布时间】:2021-07-14 14:06:51
【问题描述】:

我创建了一个插件,我想在我的应用程序的任何页面上调用它。我怎样才能做到这一点,而不是在每个页面上创建 mounted 函数并调用该插件?

【问题讨论】:

    标签: vue.js plugins nuxt.js


    【解决方案1】:

    您可以使用布局 + 中间件的组合。

    Layouts 官方文档:https://nuxtjs.org/docs/2.x/concepts/views#layouts

    中间件官方文档:https://nuxtjs.org/docs/2.x/directory-structure/middleware/


    应用范围内的全局中间件在 nuxt.config.js 文件中是可行的

    export default {
      router: {
        middleware: ['global'],
      },
    }
    

    middleware/global.js 中使用global 文件。


    根据您创建插件的方式,您也可以简单地在全局范围内注册它

    // plugins/fancy-plugin.js
    import Vue from 'vue'
    import { myFancyPlugin } from 'fancy-plugin'
    
    Vue.use(myFancyPlugin)
    

    别忘了将它添加到配置中

    // nuxt.config.js
    export default {
      plugins: [
        { src: '@/plugins/fancy-plugin' },
      ]
    }
    

    【讨论】:

    • 谢谢!但是我无法进一步注册插件。我不太了解这个概念,并且已经查看了文档。中间件已经可以工作了,但不是在完整的页面刷新上。然后它被称为未定义,每当我调用它时。但是,如果我在加载应用程序后切换页面,则插件已注册。而且是我自己写的Plugin,带有inject方法
    • 我猜这更多是插件问题而不是安装问题。您是否遵循了一些特定的创建教程,并且您确定手动导入时它可以正常工作吗?它是否支持某些特定的钩子?
    • 插件不是我写的,是同事写的。我自己对 vuejs 和 nuxt 还是很陌生。该插件被构建为一个类,其中包含方法。在它们的底部,它将其注入插件。所以我可以通过 this.$ChatApi.switchPage() 调用它。但正如我在“硬”重新加载时所说的那样,它是未定义的。我可以分享整个插件文件吗?
    • 如果它在您的应用程序中导航时有效,但在硬刷新后无效,这几乎就是您安装插件的方式。这里最好、最快和更安全的答案是询问插件的创建者。这样,您将按预期使用它。另外,到目前为止您尝试了什么?它没有在全球中间件上注册? Nuxt 生命周期的一些代码会很有帮助。也许首先尝试在你调用插件的同一个地方console.log('test'),看看这个是否适合加载。
    • ssr: false 是旧版本,您应该使用模式:client,或 server 或此处所述的任何内容:nuxtjs.org/docs/2.x/directory-structure/plugins/#object-syntax 确保您的 Nuxt 也是最新的,这可能会有一些影响。否则,很高兴我能以某种方式提供帮助,并祝进一步调查好运! :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-25
    • 2010-09-19
    • 1970-01-01
    • 1970-01-01
    • 2023-01-18
    • 2011-05-12
    相关资源
    最近更新 更多