Vue3 + vite + Ts + pinia + 实战 + 源码 +electron(2)

news/2024/12/1 8:36:34/

十二、异步组件&代码分包&suspense

顶层axios:在setup中,可以不需要使用async,它会自动编译成这个

<script setup lang="ts">
import axios from 'axios'const {data:{data}} = await axios({url:"http://localhost:8080/data.json"
})
<script/>

异步加载,分包

<script setup lang="ts">
import { defineAsyncComponent } from 'vue'
const Dialog = defineAsyncComponent(() => import('../../components/Dialog/index.vue'))//完整写法
const AsyncComp = defineAsyncComponent({// 加载函数loader: () => import('./Foo.vue'),// 加载异步组件时使用的组件loadingComponent: LoadingComponent,// 展示加载组件前的延迟时间,默认为 200msdelay: 200,// 加载失败后展示的组件errorComponent: ErrorComponent,// 如果提供了一个 timeout 时间限制,并超时了// 也会显示这里配置的报错组件,默认值是:Infinitytimeout: 3000
})
</script>

<suspense> 组件有两个插槽。它们都只接收一个直接子节点。default 插槽里的节点会尽可能展示出来。如果不能,则展示 fallback 插槽里的节点。

 <Suspense><template #default><Dialog><template #default><div>我在哪儿</div></template></Dialog></template><template #fallback><div>loading...</div></template>
</Suspense>

十三、Teleport传送组件

Teleport 是一种能够将我们的模板渲染至指定DOM节点,不受父级style、v-show等属性影响,但data、prop数据依旧能够共用的技术;类似于 React 的 Portal。

主要解决的问题 因为Teleport节点挂载在其他指定的DOM节点下,完全不受父级style样式影响

通过to 属性 插入指定元素位置 to="body" 便可以将Teleport 内容传送到指定位置
也可以自定义传送位置 支持 class id等 选择器
使用disabled 设置为 true则 to属性不生效  false 则生效
<Teleport :disabled="false"  to="body"><Loading></Loading>
</Teleport>

十四、keepalive

有时候我们不希望组件被重新渲染影响使用体验;或者处于性能考虑,避免多次重复渲染降低性能。而是希望组件可以缓存下来,维持当前的状态。这时候就需要用到keep-alive组件。

开启keep-alive 生命周期的变化

初次进入时: onMounted> onActivated
退出后触发 deactivated
再次进入:
只会触发 onActivated
事件挂载的方法等,只执行一次的放在 onMounted中;组件每次进去执行的方法放在 onActivated中

 <keep-alive :include="" :exclude="" :max=""></keep-alive>

十五、transition动画组件

<button @click='flag = !flag'>切换</button>
<transition name='fade'><div v-if='flag' class="box"></div>
</transition>

自定义过度类名 

  • enter-from-class
  • enter-active-class
  • enter-to-class
  • leave-from-class
  • leave-active-class
  • leave-to-class

十六、依赖注入Provide / Inject

父组件:

import { provide } from 'vue';
import Child from './components/Child.vue';
provide("color","我是顶级父组件")

子组件:

const color = inject("color")
console.log(color);

十七、兄弟之间的传参

方法一:传给父亲--》儿子

方法二:bus(全局事件总线)传参。废除了

方法三:mitt

        安装

 npm i mitt -S

        全局引入mitt

import mitt from 'mitt'
const Mit = mitt()
//TypeScript注册
// 由于必须要拓展ComponentCustomProperties类型才能获得类型提示
declare module "vue" {export interface ComponentCustomProperties {$Bus: typeof Mit}
}const app = createApp(App)
// 挂载到全局组件
app.config.globalProperties.$Bus = Mit
app.use(store).use(router).mount('#app')

        A组件派发事件

<template><div><button @click="emit">点我派发事件</button></div>
</template><script setup lang='ts'>
import { getCurrentInstance } from 'vue'
const instance = getCurrentInstance();
const emit = () => {instance?.proxy?.$Bus.emit('on-click', 100)
}
</script>

        B组件接收事件

import { getCurrentInstance } from 'vue'
const instance = getCurrentInstance()
instance?.proxy?.$Bus.on('on-click', (num) => {console.log(num,'===========>B')
})

监听所有事件:

instance?.proxy?.$Bus.on('*',(type,num)=>{console.log(type,num,'===========>B')
})

 移除监听的事件:

instance?.proxy?.$Bus.off('on-num',Fn)//unListen

移除所有监听事件:

instance?.proxy?.$Bus.all.clear() 

十八、自定义指令

自定义指令:简写。鉴权 directer

<template><div><button v-has-show="'create'">创建</button><button v-has-show="'edit'">新建</button><button v-has-show="'del'">删除</button></div>
</template><script setup lang='ts'>
import type { Directive } from 'vue';const permission = ["create","edit","del"
]//自定义指令
const vHasShow:Directive<HTMLElement,string> = (el,bingding) =>{console.log(el,bingding);if(!permission.includes(bingding.value)){el.style.display = 'none'}
}</script>

十九、自定义Hooks

  • Vue3 的 hook函数 可以帮助我们提高代码的复用性, 让我们能在不同的组件中都利用 hooks 函数

二十、Vue3定义全局函数和变量

设置

const app = createApp({})
app.config.globalProperties.$http = () => {}

读取

const app = getCurrentInstance()
console.log(app?.proxy?.$name)

二十一、自定Vue3插件

二十二、样式穿透

vue2:/deep/        vue3:deep(类名)


http://www.ppmy.cn/news/22445.html

相关文章

Linux嵌入式开发——C编程

文章目录Linux嵌入式开发——C编程一、编写C程序1.1、设置vim编辑器1.2、编写C程序二、编译C程序三、make工具和Makefile文件3.1、编写C程序C文件H文件3.2、不使用make工具3.3、使用make工具和Makefile文件编译Linux嵌入式开发——C编程 一、编写C程序 我们目前就是使用VIM编…

Webug4.0靶场通关

14.Webug4.0靶场通关 显错注入 首先整体浏览网站 注入点&#xff1a; control/sqlinject/manifest_error.php?id1 判断注入类型 输入: and 11 正常, 再输入: and 12 还正常, 排除数字型 输入单引号: ’ 网页发生变化 输入’ – q注释掉单引号,页面回显正常 则为字符型 判…

Linux学习之VMware虚拟机安装

前言 今天是癸卯年正月十五元宵节&#xff0c;在此祝大家元宵快乐&#xff01; 这篇文章主要给大家介绍安装VMware虚拟机的步骤&#xff0c;话不多说&#xff0c;开始安装&#xff01; 安装准备 VWware-workstation rhel-8.2-x86_64-dvd.iso 64 位操作系统 VMware安装 可…

EAPOL四次握手流程

EAPOL四次握手流程协议功能数据帧格式四次握手流程数据帧日志解析组播代码协议 802.11i 功能 作用&#xff1a;派生和交换两组密钥 密钥包括ptk加解密单播数据&#xff0c;由用户设置的pmk扩展&#xff08;在setwork的时候通过pasapharse生成&#xff09; gtk加密解组播数据…

可变参模板指南

可变参模板 文章目录可变参模板可变参函数模板基本外观和介绍展开参数包(获取参数包的值)错误的演示正确的演示采取递归方式采取逗号表达式为什么需要逗号表达式其他方式应用1.求最大值&#xff08;可接受多个参数&#xff09;2. 用可变参数模板函数模仿printf的功能3. 使用tup…

Vue理解

1.是什么&#xff1f;Vue是一个用于创建用户界面的开源JavaScript框架&#xff0c;也是一个创建单页应用的web应用框架。Vue所关注的核心是MVC模式中的视图层&#xff0c;同时它也能方便地获取数据更新&#xff0c;并通过组件内部特定的方法实现视图与模型的交互。2.Vue核心特性…

Pyspark基础入门3

Pyspark 注&#xff1a;大家觉得博客好的话&#xff0c;别忘了点赞收藏呀&#xff0c;本人每周都会更新关于人工智能和大数据相关的内容&#xff0c;内容多为原创&#xff0c;Python Java Scala SQL 代码&#xff0c;CV NLP 推荐系统等&#xff0c;Spark Flink Kafka Hbase Hi…

C++高级教程——C++多线程

C高级教程——C多线程C 多线程创建线程终止线程实例连接和分离线程C 多线程 多线程是多任务处理的一种特殊形式&#xff0c;多任务处理允许让电脑同时运行两个或两个以上的程序。在一般情况下&#xff0c;有两种类型的多任务处理&#xff1a;基于进程和基于线程。 基于进程的…