啥也不会的前端码农 2024-08-09 10:48 采纳率: 33.3%
浏览 12
已结题

Omi框架如何兼容Vue

Omi框架的打包遇到的问题

问题简要

请原谅我是一名初学者,想尝试搭建一些轮子,因此会碰上一些问题我可能并不是很能理解的。在使用Omi框架的时候,因为Omi是基于WebComponents搭建的,因此我在想能不能使用Omi完成一套跨段的组件库,比如说可以在Vue、React、Angular等框架中一起使用同一套组件库,这样子就方便维护与开发,但是现在问题是 当我打包了之后在Vue中使用,就会报错

runtime-core.esm-bundler.js:6344  Uncaught TypeError: Class constructor TButton cannot be invoked without 'new'
    at renderComponentRoot (runtime-core.esm-bundler.js:6344:13)
    at ReactiveEffect.componentUpdateFn [as fn] (runtime-core.esm-bundler.js:4992:46)
    at ReactiveEffect.run (reactivity.esm-bundler.js:177:19)
    at instance.update (runtime-core.esm-bundler.js:5123:16)
    at setupRenderEffect (runtime-core.esm-bundler.js:5133:5)
    at mountComponent (runtime-core.esm-bundler.js:4901:7)
    at processComponent (runtime-core.esm-bundler.js:4855:9)
    at patch (runtime-core.esm-bundler.js:4373:11)
    at mountChildren (runtime-core.esm-bundler.js:4605:7)
    at mountElement (runtime-core.esm-bundler.js:4528:7)

据我了解,要想在Vue或者React中使用组件的话,是需要注册这些组件库才能使用的,上面也要有Vue等相关的节点,因此有没有好的方法,就是可以让Omi打包之后可以在Vue中使用?
我希望Omi里面不要出现Vue、React等语法,可以在vue中注册等方案
我目前在Omi搭建打包方式都是参考TDesignOteam/tdesign-web-components
本人的项目地址bin-web-components
现在打包之后还会有另一个问题

img


为什么输出是这种情况?我的msg和children都被吃掉了
请求各位老大能给予我一些思路或者解决办法,谢谢

  • 写回答

21条回答 默认 最新

  • 栗筝i Java领域优质创作者 2024-08-09 10:49
    关注

    以下内容参考自 AICG 生成结果,并由 '栗筝i' 整理回复,相关结果及代码方法已验证可行,有用望采纳:


    在使用Omi框架(一个基于Web Components的库)尝试在Vue项目中集成时,你遇到的问题主要是由于Web Components和Vue等现代前端框架在组件模型和使用方式上的差异。Vue(以及React和Angular)有自己的组件系统和渲染机制,而Web Components则是浏览器原生支持的,通过自定义元素来创建可复用的UI组件。

    解决方案

    1. 正确的集成方式

    由于Omi是基于Web Components的,你可以直接在Vue中通过原生方式使用这些组件,而不需要特别的集成库或工具。这通常涉及到在你的Vue组件的模板中直接使用Web Components标签。

    2. 检查组件定义

    确保你的Omi组件被正确定义为Web Components,特别是它们是否使用了class关键字来定义,并且是否有合适的构造函数和customElements.define调用来注册它们。例如:

    class TButton extends HTMLElement {
      constructor() {
        super();
        // 初始化代码
      }
    
      connectedCallback() {
        // 组件连接到DOM时执行的代码
      }
    }
    
    customElements.define('t-button', TButton);
    

    3. 在Vue中使用

    在你的Vue组件中,你可以直接通过标签使用这些Web Components:

    <template>
      <div>
        <t-button>Click Me</t-button>
      </div>
    </template>
    
    <script>
    export default {
      // 你的Vue组件选项
    }
    </script>
    

    4. 检查Vue版本和配置

    确保你的Vue版本支持自定义元素。Vue 3 对Web Components有更好的原生支持,但你可能需要一些额外的配置来确保它们可以正常工作。

    5. 处理Vue的错误

    你遇到的错误 Uncaught TypeError: Class constructor TButton cannot be invoked without 'new' 通常表明Vue尝试以错误的方式实例化你的Web Component。这可能是由于Vue试图以Vue组件的方式去处理它,而不是作为一个简单的DOM元素。确保你的Web Component被正确地注册为自定义元素,并且Vue只是简单地将其作为一个标签插入DOM中。

    6. 使用Web Components Wrapper

    如果直接在Vue中使用Web Components遇到太多问题,你可以考虑创建一个Vue wrapper组件来封装Web Components。这可以让你在Vue的上下文中更好地控制这些组件的行为和样式。

    7. 查阅文档和社区

    查看Omi和Vue的官方文档,以及相关的社区论坛和GitHub issues,看看是否有其他人遇到过类似的问题并找到了解决方案。

    通过这些步骤,你应该能够更顺利地在Vue项目中使用Omi框架构建的Web Components。

    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 8月15日
  • 修改了问题 8月9日
  • 修改了问题 8月9日
  • 创建了问题 8月9日

悬赏问题

  • ¥15 如何解除Uniaccess管控
  • ¥15 微信小程序跳转关联公众号
  • ¥15 Java AES 算法 加密采用24位向量报错如何处理?
  • ¥15 使用X11可以找到托盘句柄,监控到窗口点击事件但是如何在监听的同时获取托盘中应用的上下文菜单句柄
  • ¥45 字符串操作——数组越界问题
  • ¥15 Loss下降到0.08时不在下降调整学习率也没用
  • ¥15 QT+FFmpeg使用GPU加速解码
  • ¥15 为什么投影机用酷喵播放电影放一段时间就播放不下去了?提示发生未知故障,有什么解决办法吗?
  • ¥15 来个会搭建付费网站的有偿
  • ¥100 有能够实现人机模式的c/c++代码,有图片背景等,能够直接进行游戏