Vue3使用dataV报错问题解决

DataV官网:https://datav-vue3.jiaminghi.com/guide/

vue2中是没有问题的,这是第一次在vue3中使用发现的报错问题

报错问题 

首先安装:

pnpm add @dataview/datav-vue3

1. 全局注册报错  

然后main.ts全局注册 

import { createApp } from 'vue'
import App from './App.vue'
import router from './router'
import dataV from '@dataview/datav-vue3'const app = createApp(App)app.use(router).use(dataV)
app.mount('#app')

然后我们pnpm dev启动的时候直接报错,并且发现dataV下面有波浪线报错 

2. 按需引入报错 

<template><div class="index"><div class="charts-content"><BorderBox1>Content</BorderBox1></div></div>
</template>
<script setup lang='ts'>
import { BorderBox1 } from '@dataview/datav-vue3'
</script>
<style scoped>

发现还是同样的报错

解决:

后来发现该库中的package.json中给的出口有问题

找到node_modules/@dataview/datav-vue3/package.json

"module": "./es/index.js",
修改为
"module": "./es/index.mjs",// 修改后的

如果要全局注册的话还需要在node_modules/@dataview/datav-vue3/es/index.mjs添加:

//D, E, G, I, K, g, C, P, h, k, u, w, z, N, Q, S, U, W, Y, _, oo, eo分别是BorderBox1...等组件
export default function(app) {const components = [D, E, G, I, K, g, C, P, h, k, u, w, z, N, Q, S, U, W, Y, _, oo, eo]components.forEach(component => {app.component(component.name, component);})
}

或者

export default {install(app) {const components = [D, E, G, I, K, g, C, P, h, k, u, w, z, N, Q, S, U, W, Y, _, oo, eo]components.forEach(component => {app.component(component.name, component);})}
}

上述修改完之后就可以正常引入使用了,但我们修改的是node_modules中的源码,如果下次再安装npm install安装依赖的时候还是会有同样的问题,所以我们要在package.json中scripts中添加脚本,即执行完npm install之后再自动执行一个脚本将node_modules中的源码替换掉,这需要我们提前将修改好的文件放在项目目录中,如下: 

新建lib文件夹,将修改好的文件放在其中

然后在package.json中scripts中添加

"scripts": {"postinstall": "node install-datav-patch.js"
}

然后在根目录下新建install-datav-patch.js文件:

 install-datav-patch.js

const path = require('path')
const fs = require('fs')const libPackagePath = path.join(__dirname, 'lib/dataview/datav-vue3/package.json')
const libIndexPath = path.join(__dirname, 'lib/dataview/datav-vue3/es/index.mjs')
const modulesPackagePath = path.join(__dirname, 'node_modules/@dataview/datav-vue3/package.json')
const modulesIndexPath = path.join(__dirname, 'node_modules/@dataview/datav-vue3/es/index.mjs')fs.writeFileSync(modulesPackagePath, fs.readFileSync(libPackagePath))
fs.writeFileSync(modulesIndexPath, fs.readFileSync(libIndexPath))

最后再重新执行npm install或者pnpm install方法即可 

报错补充:

首先上面按照上面步骤修改之后,确实是可以正常展示了,但是又发现个新问题,就是当我们在使用了上面其中的组件的页面进行页面跳转时,会发现跳转不了,控制台报错如下: 

 

然后又去看了下源码,发现在node_modules/@dataview/datav-vue3/es/components里面每个组件里面都有段逻辑一样的代码如下:

 

这是个函数,然后我们去打印了一下$el,在进入页面正常加载时正常打印就是当前组件实例,但是当跳转页面时,也就是离开页面是,这块儿$el会打印个null,直接导致不能跳转,所以我们在这儿加个try catch就行了,这就要我们在每个组件里面都要修改一下:

 

全都换成这种写法,然后我们要把改好的components这个文件夹也拷贝到上面创建的lib里面,那么install-datav-patch.js这个脚本逻辑也要修改一下,如下: 

const path = require('path')
const fs = require('fs')const libPackagePath = path.join(__dirname, 'lib/dataview/datav-vue3/package.json')
const libIndexPath = path.join(__dirname, 'lib/dataview/datav-vue3/es/index.mjs')
const libComponentsPath = path.join(__dirname, 'lib/dataview/datav-vue3/es/components')const modulesPackagePath = path.join(__dirname, 'node_modules/@dataview/datav-vue3/package.json')
const modulesIndexPath = path.join(__dirname, 'node_modules/@dataview/datav-vue3/es/index.mjs')
const modulesComponentsPath = path.join(__dirname, 'node_modules/@dataview/datav-vue3/es/components')fs.writeFileSync(modulesPackagePath, fs.readFileSync(libPackagePath));
fs.writeFileSync(modulesIndexPath, fs.readFileSync(libIndexPath));fs.rmdirSync(modulesComponentsPath, { recursive: true, force: true });const dirs = [{absolutePath: libComponentsPath,realtivePath: ''
}]for(let dir of dirs) {fs.mkdirSync(path.join(modulesComponentsPath, dir.realtivePath))const names = fs.readdirSync(dir.absolutePath)for(let name of names) {const stat = fs.statSync(path.join(dir.absolutePath, name))if(stat.isDirectory()) {dirs.push({absolutePath: path.join(dir.absolutePath, name),realtivePath: path.join(dir.realtivePath, name)})} else if(stat.isFile()) {fs.writeFileSync(path.join(modulesComponentsPath, dir.realtivePath, name), fs.readFileSync(path.join(dir.absolutePath, name)))}}
}

这就是完整的了,这样就可以正常使用其中的组件了,其实也就用了边框~ 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/161837.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

html网站-关于发展历程的案例

一、案例一 1.效果图&#xff1a; 2.代码&#xff1a; 所用到的文件自行在官网下载&#xff0c;也可在git上拉取。 <!DOCTYPE html> <html><head><meta http-equiv"Content-Type" content"text/html; charsetutf-8" /><meta…

USB驱动开发基础

USB标准 USB1.0&#xff0c; 1996&#xff0c;低速1.5Mbps和高速12Mbps&#xff0c;USB1.1 iMac G3&#xff0c;Type A和Type B接口USB 2.0 2000&#xff0c; 480Mpbs&#xff0c;Type A/B/C接口、Micro A/BUSB 3.0 5Gbps, 随着USB 3.2命名规定&#xff0c;现在也叫USB 3.2 Ge…

Nginx模块开发之http过滤器filter

文章目录 什么是过滤模块Nginx相关数据结构介绍ngx_module_t的数据结构ngx_http_module_t数据结构ngx_command_s数据结构 相关宏定义filter&#xff08;过滤器&#xff09;实现Nginx模块开发流程Nginx 模块执行具体实现流程create_loc_confmerge_loc_confpostconfiguration修改…

使用OkHttp库爬取百度云视频详细步骤

目录 摘要 一、OkHttp库简介 二、爬虫基本概念 三、使用OkHttp库爬取百度云视频 1、发送HTTP请求 2、处理响应 3、下载文件 四、可能遇到的问题及解决方案 五、注意事项 总结与建议 摘要 本文将详细介绍如何使用OkHttp库爬取百度云视频。文章首先简要介绍OkHttp库和…

【collections】Python中的OrderDict

【collections】Python中的OrderDict 文章目录 【collections】Python中的OrderDict1. 什么是OrderedDict2. Toy Code 1. 什么是OrderedDict 其实很简单OrderedDict是Python中一个字典dict的变体&#xff0c;它可以按照元素添加的顺序来保持键值对&#xff08;key-value pair&…

GPIO模式详解:推挽/开漏/浮空/上拉/下拉/施密特(迟滞)输入

GPIO(General Purpose Input Output)可用于执行数字输入或输出功能。典型的应用包括从/向模拟或数字传感器/设备读写数值、驱动LED、为I2C通信驱动时钟、生成外部组件的触发、发出中断等。 文章目录 1 GPIO简介2 输出模式2.1 推挽输出2.2 开漏输出 3 输入模式3.1 高阻态(浮空)、…

推荐一款适合做智慧旅游的前端模板

目录 前言 一、功能介绍 二、前端技术介绍 三、功能及界面设计介绍 1、数据概览 2、车辆监控 3、地图界面 4、其它功能 四、扩展说明 总结 前言 智慧旅游是一种全新的旅游业务模式&#xff0c;它充分利用先进的信息技术&#xff0c;提升旅游体验&#xff0c;优化旅游管…

【Axure高保真原型】树形表格

今天和大家分享树形表格的原型模板&#xff0c;点击树的箭头可以打开或者收起子节点&#xff0c;点击表格内容&#xff0c;可以选中该行内容实现高亮变色效果&#xff0c;树形表格是通过中继器制作的&#xff0c;使用简单&#xff0c;只需要按要求填写中继器表格即可&#xff0…

2023亚太杯数学建模思路 - 案例:粒子群算法

文章目录 1 什么是粒子群算法&#xff1f;2 举个例子3 还是一个例子算法流程算法实现建模资料 # 0 赛题思路 &#xff08;赛题出来以后第一时间在CSDN分享&#xff09; https://blog.csdn.net/dc_sinor?typeblog 1 什么是粒子群算法&#xff1f; 粒子群算法&#xff08;Pa…

安防监控视频融合平台EasyCVR定制化页面开发

安防监控EasyCVR视频汇聚平台基于云边端智能协同&#xff0c;支持海量视频的轻量化接入与汇聚、转码与处理、全网智能分发、视频集中存储等。安防视频平台EasyCVR拓展性强&#xff0c;视频能力丰富&#xff0c;具体可实现视频监控直播、视频轮播、视频录像、云存储、回放与检索…

ConditionObject介绍(二)

1. Condition的signal方法分析 分为了几个部分&#xff1a; ● 确保执行signal方法的是持有锁的线程 ● 脱离Condition的队列 ● 将Node状态从-2改为0 ● 将Node添加到AQS队列 ● 为了避免当前Node无法在AQS队列正常唤醒做了一些判断和操作 // 线程挂起后&#xff0c;可以基于…

Centos设置nginx开机自启动设置

Centos设置nginx开机自启动设置 要设置CentOS中的Nginx开机自启动&#xff0c;可以按照以下步骤进行操作&#xff1a; 首先&#xff0c;登录到CentOS服务器上&#xff0c;并以root用户或具有sudo权限的用户身份执行以下命令来安装Nginx&#xff08;如果尚未安装&#xff09;&a…

字符集合!!!

字符集合&#xff01;&#xff01;&#xff01; 描述 输入一个字符串&#xff0c;求出该字符串包含的字符集合&#xff0c;按照字母输入的顺序输出。 数据范围&#xff1a;输入的字符串长度满足 1 \le n \le 100 \1≤n≤100 &#xff0c;且只包含大小写字母&#xff0c;区分大小…

中国信息通信研究院产业与规划研究所校招一面、二面内容

本文介绍2024届秋招中&#xff0c;中国信息通信研究院的数字孪生智慧城市研究员岗位一面、二面的面试基本情况、提问问题等。 10月投递了中国信息通信研究院的数字孪生智慧城市研究员岗位&#xff0c;所在部门为数字孪生与城市数字化研究部。目前完成了一面与二面&#xff0c;在…

Django 模型和Admin站点管理(三)

一、定义模型 &#xff08;1&#xff09; 创建模型类&#xff0c;必须要继承自 models.Model from django.db import models# Create your models here. #设计数据库 #创建模型 class UserModel(models.Model):namemodels.CharField(max_length30) #对应于SQL name varchar(30…

K8s实战RestartPoliy策略

一、默认策略为Always cmd.yaml apiVersion: v1 kind: Pod metadata:name: myapp-pod labels:app: myapp spec: containers:- name: myapp-container image: busyboxcommand: [sh, -c, echo OK!&& sleep 60]首先我们根据这个yaml创建一个测试的pod 执行命令 kubec…

Vue.observable可以在vue2中给新增的属性增加响应式

将data中的config数据转为响应式&#xff1a; data() {return {config: {password1: "YQd^7D1",password2: "YQd^7D2",password3: "YQd^7D3"}}; }, computed: {transformedConfig() {if (this.config) {return Object.keys(this.config).map(k…

C++二维数组中的查找

4. 二维数组中的查找 题目链接 牛客网 题目描述 给定一个二维数组,其每一行从左到右递增排序,从上到下也是递增排序。给定一个数,判断这个数是否在该二维数组中。 Consider the following matrix: [[1, 4, 7, 11, 15],[2, 5, 8, 12, 19],[3, 6, 9, 16, 22],[1…

深度之眼Paper带读笔记GNN.08.GCN(下)

文章目录 前言细节四&#xff1a;卷积核介绍图卷积核初代目图卷积核二代目契比雪夫多项式例子小结 GCN公式推导 实验设置和结果分析数据集节点分类任务消息传递方式比较运行效率 总结关键点创新点启发点 代码复现train.pyutil.pymodel.pylayer.py 作业 前言 本课程来自深度之眼…

基于单片机直流电机调速(proteus仿真+源程序)

一、系统方案 1、本设计采用这51单片机作为主控器。 2、转速值送到液晶1602显示。 3、按键设加减速&#xff0c;开始暂停、正反转。 二、硬件设计 原理图如下&#xff1a; 三、单片机软件设计 1、首先是系统初始化 en0; rw0; write_com(0x01); //lcd初始化 write_com(0x38)…