如何在 nuxt(vue) 中使用原始 html 文件?

Posted

技术标签:

【中文标题】如何在 nuxt(vue) 中使用原始 html 文件?【英文标题】:how to use raw html file in nuxt(vue)? 【发布时间】:2021-09-03 21:25:32 【问题描述】:

我想创建一个页面跳转到条纹支付页面使用stripe-samples/firebase-subscription-payments。 所以我将它的 html/css/js 文件(在“public”文件夹中)放到了我的 nuxt 应用程序的 /static 中。 但是,由于它仅用于静态文件,因此无法使用 vuex 和插件。好在html中的标签是从url中读取firebase的,所以可以使用firebase。

但是我可以将原始的 html/css/js 文件像 .vue 文件一样放到 nuxt/pages 中吗?(我试过了,但不能..) 我知道最好的办法是把html/js文件改写成vue文件,但是对我这个初学者来说太难了(另外,我是日本人,英语不好,抱歉)。 或者我可以在 /static/files 中使用 npm 包和模块吗? google了两天还是解决不了,急需帮助,谢谢!!

这是我的代码: 静态/公共/javascript/app.js


    import firebase from firebase; 
    /*↑ it will be error "Cannot use import statement outside a module".
    but in pages/.vue files and plugins/files, it will work... 
    I also tried "import firebase from '~/plugins/firebase.js'"*/
    
    const STRIPE_PUBLISHABLE_KEY = ....


静态/公共/index.html

    <!-- Firebase App (the core Firebase SDK) is always required and must be listed first -->
    <script src="https://www.gstatic.com/firebasejs/7.14.6/firebase.js"></script>
    <script src="https://www.gstatic.com/firebasejs/7.14.6/firebase-functions.js"></script>

    <!-- If you enabled Analytics in your project, add the Firebase SDK for Analytics -->
    <script src="https://www.gstatic.com/firebasejs/7.14.5/firebase-analytics.js"></script>

    <!-- Add Firebase products that you want to use -->
    <script src="https://www.gstatic.com/firebasejs/7.14.5/firebase-auth.js"></script>
    <script src="https://www.gstatic.com/firebasejs/7.14.5/firebase-firestore.js"></script>

↑ 它从 url 读取 firebase,但我想使用我已经安装的 firebase 模块。

【问题讨论】:

你需要将它移植到nuxt,它只是一个流程示例,可以指导你在vanilla js中需要做什么,如果你想在vue/nuxt中使用相同的应用程序,你需要通过它并实施。将 .html 中的代码放入 pages/*.vue 文件中,然后创建一个插件来加载 firebase lib,或者使用 nuxt 插件firebase.nuxtjs.org 然后通过 js 文件 app.js 并转换/实现代码进入模型、方法等,如果你想在最后使用 .html 文件,你可以使用 nuxt generate.. 聘请开发人员,就像一个小时的工作 @Lawrence Cherone 我很高兴知道重写为 vue 很常见!同时,我有动力在vue中重写它^ ^感谢您的快速回答! @kissu 抱歉迟到了评论!我很高兴确信静态仍然不适合代码渲染我是初学者,所以我认为这是最佳实践^^; 没有问题。没有粗鲁的意思。这只是一个常见的错误,我正在揭穿它。 :) @kissu 我得到了一个很好的答案,值得用英语问~ 【参考方案1】:

最终我将 js / html 代码重写为 vue。基本上只要把js代码复制到mounted()中就完成了,但是由于无法用js操作嵌套的模板标签,所以我用v-if和v-for重写了一部分。

【讨论】:

【参考方案2】:

对此有多种解决方案。

要加载第 3 方脚本,您可以使用以下解决方案:https://***.com/a/67535277/8816585

根据您要加载的内容,使用 Nuxt 插件也可以是一种解决方案:https://nuxtjs.org/docs/2.x/directory-structure/plugins/

最后,这里有一个关于如何在 Nuxt 中正确处理 Stripe 的解决方案:https://***.com/a/67504819/8816585

static 不是放置您的代码的地方。如前所述,这是用于公共内容的,例如网站图标、一些您想与访问者分享的免费 pdf 书等。

最近没有在 Nuxt 中使用 firebase,但我希望这些仍然可以帮助弄清楚如何在 Nuxt 中编写它。

【讨论】:

【参考方案3】:

你可以通过render()在你的vue-component-file中加载html

nuxt.config.js

    build: 
        extend(config, ctx)
            config.resolve.alias['vue'] = 'vue/dist/vue.common';
        
    

在你的 vue 组件文件中

<script>
import myHtml from '~/path/to/your/html/my_html.html';
export default
    render(h)
         return h(
              template: `<main>$myHtml</main>`
         );
    

</script>

页面将在你的 vue &lt;router-view/&gt;&lt;nuxt/&gt; 中呈现为一个组件,但请确保你的 my_html.html 中没有 &lt;script&gt; 标签,将你的 js 代码放在 render() 中,如下所示

<script>
import myHtml from '~/path/to/your/html/my_html.html';
export default
    render(h)
         return h(
              template: `<main>$myHtml</main>`,
              created()
                   console.log('I have been created!')
              ,
              mounted()
                   console.log('I have been mounted!')
              ,
              methods: 
                   exampleMethod()
                        alert('this is an example')
                   
              
         );
    

</script>

【讨论】:

以上是关于如何在 nuxt(vue) 中使用原始 html 文件?的主要内容,如果未能解决你的问题,请参考以下文章

如何在nuxt中使用vue插件

如何在 Vue(Nuxt) 中使用图像作为 Vue 轮播的导航标签?

如何在 Nuxt.js (Vue.js) 中使用 vue-infinite-loading

如何在 Nuxt 中使用 vue-tel-input-vuetify?

Vue/Nuxt:如何在 vuex 商店中访问 Nuxt 实例?

如何在 nuxt.js (vue.js) 中配置动态 og 标签?