将 Js 插件迁移到 Vue

Posted

技术标签:

【中文标题】将 Js 插件迁移到 Vue【英文标题】:Migrating Js plugins to Vue 【发布时间】:2021-09-21 16:02:57 【问题描述】:

所以我有一个呈现一些 htmlphp 应用程序,为了在网站上提供交互性,我们有一些 js 插件可以使用一些选择器进行实例化并完成它们的工作(生成表单、加载视频等)。

现在我正在尝试将这些插件移至 Vue 3,但在获取正确方法方面存在一些问题。

我最初的方法是注册我的组件并在父级上挂载一个 vue 实例,该实例将环绕我网站上的所有内容(包括静态生成的 HTML + 我的新 vue 组件)。但是这种方法不起作用,因为 vue 只会删除该包装器中的所有内容。

让我的组件与我的静态 HTML 一起工作的唯一方法是在我的组件周围添加一个包装器元素,并为页面上的每个组件安装一个新的 Vue 实例,如下所示:

<div data-vue-component="">
   <foo-component/>
</div>

有没有办法避免这样做? 理想情况下,我希望页面上只有一个实例,并且只使用静态 HTML 旁边的组件。

【问题讨论】:

【参考方案1】:

所以...这根本不是问题。

简单的解决方法是在创建实例并删除 $mount('#selector') 调用时提供 el: '#selector' 属性。

所以我的代码变成了

Vue.component('test-button', () => import('../vue-components/TestButton'))
Vue.component('test-component', () => import('../vue-components/TestComponent'))

const instance = new Vue(
   el: '.wrap'
)

现在我可以使用 2 个测试组件,而无需为每个组件创建一个新实例。

由于我不知道页面是否有插件,所以我创建了一个使用动态导入延迟加载 Vue 的类:

export class VueInitializer 
   static init () 
    const vueComponents = document.querySelector('[data-vue-component]')

    if (!vueComponents) 
        return
    

    const vue = () => import('vue')


    vue().then((module) => 
        const Vue = module.default

        //lazy load la all components
        Vue.component('test-button', () => import('../vue-components/TestButton'))
        Vue.component('test-component', () => import('../vue-components/TestComponent'))
        const instance = new Vue(
            el: '.wrap'
        )
    )

这个实现的坏处是您需要向我们的组件添加一个数据属性。

【讨论】:

以上是关于将 Js 插件迁移到 Vue的主要内容,如果未能解决你的问题,请参考以下文章

如何将 Vue .prototype 迁移到单独的文件

对比四大主流框架,我们为什么以及是如何从 Angular.js 迁移到 Vue.js?

开发对比四大主流框架,我们为什么以及是如何从 Angular.js 迁移到 Vue.js?

我需要在短时间内学习 vuex,因为我不知道如何将我的 vue js 迁移到 vuex?

从 Vue2 轻松迁移到 Vue JS 3 的最佳实践?

如何从 Angular.js 迁移到 Vue.js?