用vue3.0 +vue3.2+vue2+vite+echarts+datav 遇到的坑

1上午有个BUG 在vue3 中 引入 vue2 子组件 传值 传不过去, 解决办法 是用wath 深度监听; 数据存入实例的data中 就OK了; vu父组件v3 用ref 定义数组, 不用 reactive 2023.3.2

2

src\view\party-branch\Index copy.vue

3在datav中 定位。应该封装成组件 或者 用弹性盒子

4可视化 用vh vw % 流式布局 弹性盒布局

5 为什么 父子组件嵌套 vue3引入vue2 父子传值 vue2 子组件 的props 打印出来有值,但是是个空数组Array;打印具体的值 是空
在这里插入图片描述
6背景色 透明度:
background-color: rgb(0 0 0 / 16%);
在这里插入图片描述
7动画 播放一页(有点像轮播)

html
 <div class="public" style="display: flex; flex-direction: column">
            <div class="scrollboxF">
              <div ref="scrollboxC" class="anmi"></div>
            </div>
          </div>
css
.public {
        position: absolute;
          left: 20px;
          top: 45px;
          width: 390px;
          height: 546px;
      
        .scrollboxF {
          // margin-top: 10vh;
          margin-left: 10px;
          display: flex;
          width: 93%;
          height: 63vh;
          color: white;
          font-size: 20px;
          // background-color: rgb(0, 0, 0);
          word-break: break-all;
          overflow-y: hidden;
      
          .anmi {
            -webkit-animation: 30s rowup linear infinite normal;
            animation: 30s rowup linear infinite normal;
            position: relative;
          }
      
          @keyframes rowup {
            0% {
              -webkit-transform: translate3d(0, 0, 0);
              transform: translate3d(0, 0, 0);
              // margin-top: -25vh;
            }
      
            100% {
              -webkit-transform: translate3d(0, -100px, 0);
              transform: translate3d(0, -100vh, 0);
              margin-top: 0vh;
            }
          }
      
          /* 动画关键帧 */
          .anmi:hover {
            /* 设置动画是否暂停*/
            animation-play-state: paused;
          }
        }
      }
js

async infoCenter1 () {
      let res = await infoCenter({})
      if (res.success) {
        const { data } = res
        // scrollboxC.value.innerHTML="的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事"  这是VUE3  的
     
        this.$refs.scrollboxC.innerHTML = "的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事的事"
      }
    },

效果:
在这里插入图片描述

8 封装时间组件:

<template>
  <div class="timer">
    <span>{{ date }}</span>
    <span>{{ time }}</span>
    <span> {{ week }}</span>
  </div>
</template>
  
  <script>
export default {
  data() {
    return {
      timer: null,
      time: "",
      date: "",
      week: "",
    };
  },
  mounted() {
    this.dateFormat();
    this.timer = setInterval(() => {
      this.dateFormat();
    }, 1000);
  },
  methods: {
     // 时钟逻辑
     dataDestroy() {
      if (this.timer) {
        clearInterval(this.timer); // 在Vue实例销毁前,清除我们的定时器
      }
    },
    dateShow() {},
    dateFormat() {
      let date = new Date();
      let year = date.getFullYear();
      let month =
        date.getMonth() + 1 < 10
          ? "0" + (date.getMonth() + 1)
          : date.getMonth() + 1;
      let day = date.getDate() < 10 ? "0" + date.getDate() : date.getDate();
      let hours =
        date.getHours() < 10 ? "0" + date.getHours() : date.getHours();
      let minutes =
        date.getMinutes() < 10 ? "0" + date.getMinutes() : date.getMinutes();
      let seconds =
        date.getSeconds() < 10 ? "0" + date.getSeconds() : date.getSeconds();
 
      this.date = year + "年" + month + "月" + day + "日";
      this.time = hours + ":" + minutes + ":" + seconds;
      this.week = "星期" + "日一二三四五六".charAt(date.getDay());
    }
  },
};
</script>
<style scoped>
    .timer{
        color:white;
        font-size:22px;
        margin-right: 20px;
        cursor: pointer;
    }
    span{
        margin:1vh
    }
</style>

9 pc端 大屏展示,布局最优方案之一;弹性盒子; 或者grid;
在这里插入图片描述

在2K下显示 没有问题, 在1K下显示 布局乱了! 原因是定位的问题;应该用流式布局 和弹性盒子!!!

10因布局原因 要全部都改成 弹性盒子
!](https://img-blog.csdnimg.cn/a17b15b2131140f6b474081edbdc0eef.png)

先调 同一个方向的全部, 先竖再横 先横再竖 都可;

11伪元素生成背景:
在这里插入图片描述
在这里插入图片描述

 .img-withdR::before {
        position: absolute;
        left: 0;
        top:0;
        content: "";
        width: 99%;
        height: 100%;
        display: block;
        background: url("../../assets/12月绩效公示bg.png") no-repeat center;
        background-size: 100% 100%;
      }

12 响应式页面 高度用百分比;我最先考虑用弹性盒子。但后面觉得还是百分比香;vh用了,但是在退出全屏的时候 会变形。最终选择了百分比;
在这里插入图片描述
响应式大屏可视化,布局思路:横向用弹性盒子,竖向用flex 或者百分比; 方案2 用grid!

13 竖向的 可以做成动画 展示 我做 复杂了, 做成轮播了;
在这里插入图片描述

14,比!impotant 更强的修改样式方式;修改了字体大小
在这里插入图片描述
14 封装成组件后引入 echaets 初始化的那个dom 不报错
在这里插入图片描述
#main{
width: 500px;height: 500px;
background: #000;
}
15 js 表示空格\xa0
console.log(${levelArray[0]}${personArray[0]}\xa0\xa0${levelArray[1]}${personArray[1]});
在这里插入图片描述
16 递归 处理狗币的垃圾数据
后端返回的json:

{
    "code": "00000",
    "data": {
        "children": [
            {
                "children": [
                    {
                        "children": [
                            {
                                "children": [],
                                "count": "1",
                                "fid": "10201",
                                "groupId": "",
                                "groupMajor": "",
                                "id": "1020101",
                                "name": "业务运营组",
                                "remark": "负责支撑市公司人财物、生产营销及综合类业务系统建设运营"
                            }
                        ],
                        "count": "1",
                        "fid": "102",
                        "groupId": "",
                        "groupMajor": "",
                        "id": "10201",
                        "name": "业务专责",
                        "remark": ""
                    }
                ],
                "count": "5-7",
                "fid": "1",
                "groupId": "zhu",
                "groupMajor": "1",
                "id": "102",
                "name": "副主任-主任",
                "remark": ""
            },
            {
                "children": [
                    {
                        "children": [
                            {
                                "children": [
                                    {
                                        "children": [],
                                        "count": "0",
                                        "fid": "1030201",
                                        "groupId": "",
                                        "groupMajor": "",
                                        "id": "103020101",
                                        "name": "系统运维组",
                                        "remark": "负责中心所辖信息系统运行维护"
                                    },
                                    {
                                        "children": [],
                                        "count": "0",
                                        "fid": "1030201",
                                        "groupId": "",
                                        "groupMajor": "",
                                        "id": "103020102",
                                        "name": "客户服务组",
                                        "remark": "负责全重庆公司信息系统客户应用服务,市公司桌面及无纸化 会议服务"
                                    }
                                ],
                                "count": "1",
                                "fid": "10302",
                                "groupId": "",
                                "groupMajor": "",
                                "id": "1030201",
                                "name": "系统工程师",
                                "remark": ""
                            }
                        ],
                        "count": "0-0",
                        "fid": "103",
                        "groupId": "ren",
                        "groupMajor": "1",
                        "id": "10302",
                        "name": "副主任-主任",
                        "remark": ""
                    }
                ],
                "count": "1",
                "fid": "1",
                "groupId": "",
                "groupMajor": "",
                "id": "103",
                "name": "客户服务中心",
                "remark": ""
            }
        ],
        "count": "16",
        "fid": "0",
        "groupId": "",
        "groupMajor": "",
        "id": "1",
        "name": "业务中心",
        "remark": ""
    },
    "message": "成功",
    "success": true
}

在这里插入图片描述

 function dispose (firstArray) {  1定义一个函数
          firstArray.map((item) => { 遍历每一个item{}
            if (item.children.length == 0) { 判断是否有children
              item.name = `${item.name}${item.count}()`
            } else {有children 中 分2中情况 有n-n的和 无n-n的
              if (item.count.length === 1) {
                let personArray = item.count.split('-')
                let levelArray = item.name.split('-')
                item.name = `${levelArray[0]}${personArray[0]}()`
              } else {
                let personArray = item.count.split('-')
                let levelArray = item.name.split('-')
                item.name = `${levelArray[0]}${personArray[0]}()\xa0\xa0${levelArray[1]}${personArray[1]}()`
              }
            }
            dispose(item.children) 递归调用 并传参  把每个item{}的children传入;
            return
          })
        }
        dispose(firstArray)调用函数传参  []

17 组件当中的样式,只写在组件本身的css中! 不要写在父组件中!
在这里插入图片描述

好的,下面是搭建 Vue 3.0 + Vite + Pinia + TypeScript 的步骤: 1. 安装 Node.js,推荐使用 LTS 版本。 2. 安装 Vite: ``` npm init vite-app my-project ``` 这里我们使用 Vite 初始化一个新项目,名称为 my-project。 3. 安装依赖: ``` cd my-project npm install ``` 4. 安装 Vue 3.0: ``` npm install vue@next ``` 5. 安装 Pinia: ``` npm install pinia ``` 6. 安装 TypeScript: ``` npm install --save-dev typescript ``` 7. 配置 TypeScript: 在项目根目录下创建 `tsconfig.json` 文件,内容如下: ```json { "compilerOptions": { "target": "esnext", "module": "esnext", "strict": true, "jsx": "preserve", "sourceMap": true, "moduleResolution": "node", "esModuleInterop": true, "experimentalDecorators": true, "emitDecoratorMetadata": true, "skipLibCheck": true, "forceConsistentCasingInFileNames": true }, "include": ["src/**/*.ts", "src/**/*.tsx", "tests/**/*.ts", "tests/**/*.tsx"], "exclude": ["node_modules"] } ``` 8. 安装 Pinia Devtools(可选): ``` npm install @pinia/devtools --save-dev ``` 9. 在 `main.ts` 中进行配置: ```typescript import { createApp } from 'vue' import { createPinia } from 'pinia' import App from './App.vue' const app = createApp(App) // 创建 Pinia 实例 const pinia = createPinia() // 将 Pinia 实例挂载到 app 上 app.use(pinia) app.mount('#app') ``` 10. 编写组件: 在 `src` 目录下创建一个 `components` 目录,然后创建一个 `HelloWorld.vue` 组件: ```vue <template> <div> <h1>Hello, {{ name }}</h1> <button @click="increase">Increase</button> <p>{{ count }}</p> </div> </template> <script lang="ts"> import { defineComponent } from 'vue' import { useStore } from 'pinia' export default defineComponent({ name: 'HelloWorld', setup() { const store = useStore() const name = store.getters.getName const count = store.state.count const increase = () => { store.commit('increase') } return { name, count, increase } }, }) </script> ``` 11. 在 `App.vue` 中使用组件: ```vue <template> <HelloWorld /> </template> <script lang="ts"> import { defineComponent } from 'vue' import HelloWorld from './components/HelloWorld.vue' export default defineComponent({ name: 'App', components: { HelloWorld, }, }) </script> ``` 12. 运行项目: ``` npm run dev ``` 至此,我们已经成功搭建了 Vue 3.0 + Vite + Pinia + TypeScript 的项目。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值