当前位置: 首页 > news >正文

【uniapp】踩坑日记核心重点

一、scroll-view内部使用弹出层问题
在uniapp中使用scroll-view标签,其内部如果调用了poup等类似全局的弹出层,弹窗后引发相关的问题(弹出层始终仅在scroll-view内部),难以察觉找到问题所在。(h5端一般是正常的,主要是app端)

这是因为,scroll-view使用了scroll-yscroll-x等属性,会导致超出部分被隐藏,这也是至今官方没有解决的,虽然更推荐将弹窗组件放置最外层,但是难以避免有时候在scroll-view内部使用封装调用的组件,这里提供一个简单的解决方案

动态的去改变isScroll,当弹出层弹出之前将isScroll设置为false,关闭之后再改为true,这样弹出的时候就会不受影响,关闭后也能正常滑动

<scroll-view>
   :scroll-y="isScroll"
</scroll-view>

二、tabbar滚动条避免互相影响
在项目开发中,uniapp为了更好的用户体验,所有的页面均设置了类似keep-alive的缓存机制,虽然vue3的语法可以不用在template中设置根标签,但是你如果默认的没有限定在某个view视图层中或者使用scroll-view标签,就会使用根节点的滚动条,因此tabbar的各个界面滚动时都会收到影响。

三、项目中怎么使用echarts或者词云图之类的
项目中没有document的概念,可以借助renderjs,这样就能使用document获取节点进行渲染,然后通过调用echarts的updateEcharts来触发setOption更新数据

<template>
  <view class="content">
    <view
      @click="echarts.onClick"
      :prop="option"
      :change:prop="echarts.updateEcharts"
      id="echarts"
      class="echarts"
    ></view>
  </view>
</template>
<script>
var datas = [];
export default {
  data() {
    return {
      option: {
        series: [
          {
            data: [],
          },
        ],
      },
    };
  },
  props: {
    word_cloud: {
      default: () => [],
    },
  },
  mounted() {
    this.word_cloud_datas = this.word_cloud;
    this.upChartsOption();
  },
  methods: {
    upChartsOption() {
      this.option.series[0].data = this.word_cloud;
    },
    onViewClick(options) {
      console.log(options);
    },
  },
};
</script>

<script module="echarts" lang="renderjs">
import 'echarts-wordcloud';
import * as echarts from 'echarts';
import { videoDetailStore } from '@/stores/videoDetail';
let myChart;
export default {
	mounted() {
    this.initEcharts()
	},
	methods: {
		initEcharts() {
      if(echarts.init){
        myChart = echarts.init(document.getElementById('echarts'))
        // 观测更新的数据在 view 层可以直接访问到
        myChart.setOption({
        backgroundColor: '#fff', // canvas背景颜色
        // canvas标题配置项
        series: [
          {
            type: 'wordCloud',
            shape: 'circle', //circle cardioid diamond triangle-forward triangle
            left: 0,
            right: 0,
            top: 0,
            width: '100%',
            height: '100%',
            gridSize: 0, //值越大,word间的距离越大,单位像素
            sizeRange: [10, 40], //word的字体大小区间,单位像素
            rotationRange: [-90, 90], //word的可旋转角度区间
            textStyle: {
                color: function () {
                    const colors = ['#fda67e', '#81cacc', '#cca8ba', "#88cc81", "#82a0c5", '#fddb7e', '#735ba1', '#bda29a', '#6e7074', '#546570', '#c4ccd3'];
                    return colors[parseInt(Math.random() * 10)];
              },
              emphasis: {
                shadowBlur: 2,
                shadowColor: '#000',
              },
            },
            data: [],
            backgroundColor: 'rgba(100, 255, 255, 0.6)',
          },
        ],
      })
      }
		},
		updateEcharts(newValue, oldValue, ownerInstance, instance) {
			// 监听 service 层数据变更
      if(myChart){
        myChart.setOption(newValue)
      }
		},
		onClick(event, ownerInstance) {
			// 调用 service 层的方法
			ownerInstance.callMethod('onViewClick', {
				test: 'test'
			})
		}
	}
}
</script>
<style>

</style>

三、app端不支持import.meta的读取
所以在配置环境变量的时候要注意,import.meta只适用h5端

相关文章:

  • 【uniapp】踩坑日记核心重点
  • docker入门(1)----服务/镜像/容器相关命令
  • 100种思维模型之全局观思维模型-67
  • 设计模式 - 观察者模式
  • 【Go语言从入门到实战】面向对象编程篇
  • 前端人必须掌握的抓包技能(原理到实践)
  • 『树莓派云台机器人』01. 使用手机控制树莓派云台机器人
  • Dart 语言的空安全特性
  • Linux 内存管理全面剖析
  • chatgpt赋能python:Python二维码解码-从介绍到结论
  • java设计模式之责任链设计模式的前世今生
  • C# 栈(Stack)
  • 热门API 大全推荐(含OCR 识别/运营商二要素等)
  • 版图设计IC617 virtuoso工具使用,创建一个库
  • 小程序外包开发上线流程
  • OPCUA从入门到精通看这里就够了
  • 盘点2023天猫淘宝618满减规则和活动时间表
  • 智能蓝牙防丢器
  • 理解VXLAN网络
  • STM32F103 USB实现虚拟串口
  • leetcode 942. 增减字符串匹配
  • Docker应用部署之Nginx
  • JAVA软件测试(贝泽成熟度模型)
  • Benewake(北醒) 快速实现 TF02-Pro-IIC 与电脑通信操作说明
  • Eclipse教程 Ⅴ
  • 【MySQL】主从复制(两台服务器)
  • 数据库之主键、联合主键
  • openpose原理及安装教程(姿态识别)
  • C++ RapidJSON使用详解
  • JVM-基础知识