vue 问题汇总

771 阅读1分钟

问题一

element-plus 插件报错

Module not found: Error: Package path ./lib/locale/lang/zh-cn is not exported from package ...项目路径\node_modules\element-plus (see exports field in ...项目路径\node_modules\element-plus\package.json)



ERROR in ./src/plugins/element.js 2:0-48
Module not found: Error: Package path ./lib/theme-chalk/index.css is not exported from package ...项目路径\node_modules\element-plus (see exports field in ...项目路径\node_modules\element-plus\package.json)
 @ ./src/main.js 5:0-51 7:0-18

ERROR in ./src/plugins/element.js 3:0-56
Module not found: Error: Package path ./lib/locale/lang/zh-cn is not exported from package ...项目路径\node_modules\element-plus (see exports field in ...项目路径\node_modules\element-plus\package.json)
 @ ./src/main.js 5:0-51 7:0-18

方法

之前的代码

import ElementPlus from 'element-plus'
import 'element-plus/lib/theme-chalk/index.css'
import locale from 'element-plus/lib/locale/lang/zh-cn'

export default (app) => {
  app.use(ElementPlus, { locale })
}

修改后的代码

import ElementPlus from 'element-plus'
import 'element-plus/theme-chalk/index.css'
import locale from 'element-plus/es/locale/lang/zh-cn'

export default (app) => {
  app.use(ElementPlus, { locale })
}

总结

安装的element-plus 2.4.2 依赖, 里面部分代码路径更新了, 导致插件中的配置有问题

问题二

tab切换(VUE中el-tabs切换)echarts无法显示的问题

最近刚好项目里需要用到tab切换显示echarts,也同样出现了图表总是刷不出来的问题。对于这个问题我也是翻看了很多资料哈,其实最后都不是我想要的效果之类的,比如说v-if之类的,话不多说直接上我自己的解决办法

方法一

每次tab切换时我们只需要重新获取到该标签,然后调用一下resize就行

var echarts = require('echarts');
this.dataChart = echarts.init(document.getElementById('dvDataCharts'));

image.png

在el-tabs事件tabChange里引用echarts的resize(),前面一定要加this.$nextTick哦

image.png

方法二

var echarts = require('echarts');
this.dataChart = echarts.init(document.getElementById('dvDataCharts'));
handleClick (active) {
  if(active.name == 'echart'){
    this.$nextTick(()=>{
      this.dataChart && this.dataChart.resize();
      //echarts.getInstanceByDom(this.$refs.dvEchart).resize();
    })
  }

},

总结

每次tab切换时我们只需要重新获取到该标签,然后调用一下resize

问题三

vue3 reactive赋值问题

let obj = reactive({
	name: 'zhangsan',
	age: '18'
})
obj = {
	name: 'lisi'
	age: ''
}
// 上面这样赋值检测不到,因为响应式的是它的属性,而不是它自身
			
// 如需要对 reactive 赋值
// 方法1: 单个赋值
obj['name'] = 'lisi';
obj['age'] = '';
// 方法2:多包一层
let obj = reactive({
	data: {
		name: 'zhangsan',
		age: '18'
	}
})
obj.data = {
	name: 'lisi'
	age: ''
}

清空对象

// 错误示例
<template>
  <div>{{ obj }}</div>
  <button @click="click">点击</button>
</template>
 
<script setup>
import { reactive } from 'vue'
let obj = reactive({a: 111, b: 222})
const click = () => {
  obj = {}
  console.log(obj) // 这里打印的结果是正常的空对象
}
</script>

如何监听vuex中的变量参数变化,用watch!

watch: { 
    '$store.getters.vuex变量'(d) {
        console.log(d);
    },
},
import { mapGetters } from "vuex";
 
computed: {
    ...mapGetters(["vux变量"]), 
},
 
watch: {
    vux变量(d) {
        console.log(d);
    },
},