【Vue2】动态组件的使用-切换组件和keep-alive,以及异步组件

news2024/11/26 0:38:00

目录

    • 想实现切换不同列表展示不同数据
      • 方法一
      • 方法二,动态组件
          • 动态组件的父组件如何传的值
          • 动态组件的子组件如何接受传的值
    • 认识keep-alive
      • 缓存组件的生命周期
    • 异步组件,单独打包,实现webpack分包,
      • 如何对组件进行单独打包,目的缓解首页加载速度
      • 解决方法 异步组件
      • 代码分包默认打包过程

想实现切换不同列表展示不同数据

方法一

  • 通过v-if判断逻辑。负责显示哪个
  • 缺点:当有大量逻辑判断的时候不推荐
<template>
  <div class="home">
    <div class="nev">
      <div
        class="nevbar"
        :class="nevindex == index ? 'newnev' : ''"
        v-for="(item, index) in tab"
        :key="index"
        @click="itemClick(index)"
      >
        {{ item }}
      </div>
    </div>
    <one v-if="nevindex==0"></one>
    <two v-if="nevindex==1"></two>
    <three v-if="nevindex==2"></three>
  </div>
</template>

<script>
import one from "../components/one.vue";
import two from "../components/two.vue";
import three from "../components/three.vue";
export default {
  name: "HomeView",
  components: {
    one,
    two,
    three,
  },
  data() {
    return {
      tab: ["列表1", "列表2", "列表3"],
      nevindex: 0,
    };
  },
  methods: {
    // nev切换
    itemClick(index) {
      this.nevindex = index;
    },
  },
  created() {},
};
</script>
<style scoped lang="scss">
.nev {
  display: flex;
  justify-content: space-around;
}
.newnev {
  color: aqua;
}
</style>

在这里插入图片描述

方法二,动态组件

  • 1.功能类似于tab组件,可用于组件的切换
  • 2.is属性决定了component当前渲染的组件,is属性可以是组件或者是字符串,当是字符串时代表组件的注册名称或者是标签名
  • 3.component动态组件上可以传任意参数和事件,且会被所有is上的当前组件所接收
  • 简单的说,component就像一个容器,根据is属性来决定渲染什么组件,其他的没有什么区别
<template>
  <div class="home">
    <div class="nev">
      <div
        class="nevbar"
        :class="nevindex == index ? 'newnev' : ''"
        v-for="(item, index) in tab"
        :key="index"
        @click="itemClick(index)"
      >
        {{ item }}
      </div>
    </div>
    <div>
      <component :is="tabsIndex[nevindex]"></component>
    </div>
  </div>
</template>

<script>
import one from "../components/one.vue";
import two from "../components/two.vue";
import three from "../components/three.vue";
export default {
  name: "HomeView",
  components: {
    one,
    two,
    three,
  },
  data() {
    return {
      tab: ["列表1", "列表2", "列表3"],
      tabsIndex: ["one", "two", "three"],
      nevindex: 0,
      ISshow: "one",
    };
  },
  methods: {
    // nev切换
    itemClick(index) {
      this.nevindex = index;
    },
  },
  created() {},
};
</script>
<style scoped lang="scss">
.nev {
  display: flex;
  justify-content: space-around;
}
.newnev {
  color: aqua;
}
</style>
动态组件的父组件如何传的值
<component
  name="乞力马扎罗"
  @getClick="getClick"
  :is="tabsIndex[nevindex]"
></component>

//js中
 methods: {
    //子组件传的值
    getClick(e) {
      console.log(e);
    },
  },
动态组件的子组件如何接受传的值
<template>
    <div>
        <h2>one页面{{name}}</h2>
        <button @click="handClick">子组件</button>
    </div>
</template>
<script>
export default {
    props:{
        name:{
            type:String,
            default:''
        }
    },
    methods:{
        handClick(){
            this.$emit('getClick',"接受到了子组件的值")
        },
    }
}
</script>

认识keep-alive

  • v-if切换这些,都会造成组件的销毁,会在这里监听到
 //组件卸载
 unmounted(){
 },
  • 缺点,数据的状态未保存
  • 保持存活,用keep-alive包裹即可
  • keep-alive有一些属性
  • 1,include存放的name是组件自身的name属性,只有名称匹配的组件会被缓存
  • 2,exclude,任何名称匹配的组件都不会被缓存
  • 3,max,最多可以缓存多少组件实例,一旦达到这个数字,那么缓存组件中最近没有被缓存的实例会被销毁
  • 以下是三种写法
//字符串
 <keep-alive include="homeone,hometwo">
   <component
     name="乞力马扎罗"
     @getClick="getClick"
     :is="tabsIndex[nevindex]"
   ></component>
 </keep-alive>
 //正则
 <keep-alive :include="/homeone|hometwo/">
   <component
     name="乞力马扎罗"
     @getClick="getClick"
     :is="tabsIndex[nevindex]"
   ></component>
 </keep-alive>
 //数组
 <keep-alive :include="['homeone', 'hometwo']">
   <component
     name="乞力马扎罗"
     @getClick="getClick"
     :is="tabsIndex[nevindex]"
   ></component>
 </keep-alive>

在这里插入图片描述

缓存组件的生命周期

  • 该组件内部
//缓存组件的生命周期,进入活跃状态
   activated(){
     console.log("活跃")
   },
   //离开
   deactivated(){
     console.log("离开")
   }

异步组件,单独打包,实现webpack分包,

在这里插入图片描述

如何对组件进行单独打包,目的缓解首页加载速度

解决方法 异步组件

  • vue中,通过vue提供的函数,defineAsyncComponent
  • import函数可以让webpack对导入文件进行分包处理
  • 目的:是可以对其进行分包处理
  • 步骤:
//异步组件
import {defineAsyncComponent} from 'vue'
//工厂函数写法,返回promise对象
const threevue=defineAsyncComponent(()=>import("../components/three.vue"))

在这里插入图片描述

  • npm run build

在这里插入图片描述

代码分包默认打包过程

  • 默认情况下,构建整个组件树的过程中,因为组件和组件之间是通过模块化直接依赖的,那么wbpack在打包时候就会将组件模块打包在一起
  • 这个时候随着项目的不断变大,app.js文件的内容过大,会造成首屏的渲染速度变慢
  • 打包时,代码的分包
  • 对于一些不需要立即使用的组件,可以单独对他们进行拆分,拆分成一些小的代码块chunk.js
  • 这些chuck.js会在需要时从服务器加载下来,并且运行代码

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

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

相关文章

实习笔记(一)

自定义注解&#xff1a; 自定义注解中有三个元注解Target,Retention,Document /*** 系统日志注解** author Mark sunlightcsgmail.com*/ Target(ElementType.METHOD) Retention(RetentionPolicy.RUNTIME) Documented public interface SysLog {String value() default "…

react-router-dom6 路由不合法

1、昨天用react-router-dom6搭建了个项目&#xff0c;简直了&#xff0c;一个bug直接给我应用干废了&#xff01; 2、我试了试不合法的url是如何处理的&#xff0c;随意输入了个反斜杠 http://localhost:8089/#/\ 3、结果应用搞岔气了&#xff0c; 意思是我的url不合法。 这没问…

Qt creator之对齐参考线——新增可视化缩进功能

Qt creator随着官方越来越重视&#xff0c;更新频率也在不断加快&#xff0c;今天无意中发现qt creator新版有了对齐参考线&#xff0c;也称可视化缩进Visualize Indent&#xff0c;默认为启用状态。 下图为旧版Qt Creator显示设置栏&#xff1a; 下图为新版本Qt Creator显示设…

ctfshow—萌新—web1

0x00 前言 CTF 加解密合集CTF Web合集 0x01 题目 0x02 Write Up 解法1 标准的数字型注入 查列名 http://cc3ecc3f-8c42-4624-979e-277a51ea85d2.challenge.ctf.show/?id1%20union%20select%20table_name,column_name,3%20from%20information_schema.columns%20where%20t…

Linux—LVM基础

Linux—LVM 一、什么是LVM二、LVM名词解释三、LVM的写入模式四、LVM的工作原理五、LVM的优缺点六、创建PV/VG/LV的方法补充说明 一、什么是LVM LVM&#xff08;Logical Volume Manager&#xff09;&#xff0c;即逻辑卷管理&#xff0c;是Linux环境下对磁盘分区进行管理的一种…

校园宿舍管理系统java学生楼层宿管 jsp源代码

本项目为前几天收费帮学妹做的一个项目&#xff0c;Java EE JSP项目&#xff0c;在工作环境中基本使用不到&#xff0c;但是很多学校把这个当作编程入门的项目来做&#xff0c;故分享出本项目供初学者参考。 一、项目描述 校园宿舍管理系统 系统有1权限&#xff1a;管理员 二…

代码随想录算法训练营第三十六天|背包理论基础,LeetCode 416

目录 背包理论基础 动态规划五步曲&#xff1a; 1.确定dp[i][j]的含义 2.找出递推公式 3.初始化dp数组 4.确定遍历顺序 5.举例dp数组 背包理论基础II 动态规划五步曲&#xff1a; 1.确定dp[j]含义 2.找出递推公式 3.初始化dp数组 4.确定遍历顺序 5.举例dp数组 L…

[MAUI]在.NET MAUI中实现可拖拽排序列表

.NET MAUI 中提供了拖放(drag-drop)手势识别器&#xff0c;允许用户通过拖动手势来移动控件。在这篇文章中&#xff0c;我们将学习如何使用拖放手势识别器来实现可拖拽排序列表。在本例中&#xff0c;列表中显示不同大小的磁贴&#xff08;Tile&#xff09;并且可以拖拽排序。 …

【JavaEE基础学习打卡02】是时候了解Java EE了!

目录 前言一、为什么要学习Java EE二、Java EE规范介绍1.什么是规范&#xff1f;2.什么是Java EE规范&#xff1f;3.Java EE版本 三、Java EE应用程序模型1.模型前置说明2.模型具体说明 总结 前言 &#x1f4dc; 本系列教程适用于 Java Web 初学者、爱好者&#xff0c;小白白。…

断点续传的未来发展趋势与前景展望

断点续传是一种在网络传输中断后&#xff0c;能够从中断的位置继续传输的技术。它可以有效地避免因为网络不稳定、服务器故障、用户操作等原因导致的传输失败&#xff0c;节省了用户的时间和流量&#xff0c;提高了传输的效率和可靠性。断点续传在很多场景中都有广泛的应用&…

DEWDROP65 DM蓝牙5.2双模热插拔PCB

键盘使用说明索引&#xff08;均为出厂默认值&#xff09; 软件支持&#xff08;驱动的详细使用帮助&#xff09;一些常见问题解答&#xff08;FAQ&#xff09;首次使用步骤蓝牙配对规则&#xff08;重要&#xff09;蓝牙和USB切换键盘默认层默认触发层0的FN键配置的功能默认功…

【Linux】Shell脚本之流程控制语句 if判断、for循环、while循环、case循环判断 + 实战详解[⭐建议收藏!!⭐]

&#x1f468;‍&#x1f393;博主简介 &#x1f3c5;云计算领域优质创作者   &#x1f3c5;华为云开发者社区专家博主   &#x1f3c5;阿里云开发者社区专家博主 &#x1f48a;交流社区&#xff1a;运维交流社区 欢迎大家的加入&#xff01; &#x1f40b; 希望大家多多支…

什么是BP反向传播算法

什么是BP反向传播算法 神经网络是个好工具&#xff0c;但就像有的刀削铁如泥&#xff0c;有的却只能拿来切豆腐。 真正决定神经网络好不好用的是神经元之间连接的权重和神经元的阈值。 如何确定这些数字&#xff0c;大部分时间我们都在使用反向传播&#xff0c;也就是常说的B…

nginx 基础

巩固基础&#xff0c;砥砺前行 。 只有不断重复&#xff0c;才能做到超越自己。 能坚持把简单的事情做到极致&#xff0c;也是不容易的。 nginx简易 #配置负载均衡 upstream myaaa {server localhost:8089;server localhost:8099;}server {listen 8085;server_name lo…

WebRTC | SDP详解

目录 一、SDP标准规范 1. SDP结构 2. SDP内容及type类型 二、WebRTC中的SDP结构 1. 媒体信息描述 &#xff08;1&#xff09;SDP中媒体信息格式 i. “artpmap”属性 ii. “afmtp”属性 &#xff08;2&#xff09;SSRC与CNAME &#xff08;3&#xff09;举个例子 &…

JVM---理解jvm之对象已死怎么判断?

目录 引用计数算法 什么是引用 可达性分析算法&#xff08;用的最多的&#xff09; 引用计数算法 定义&#xff1a;在对象中添加一个引用计数器&#xff0c;每当有一个地方引用它时&#xff0c;计数器值就加一&#xff1b;当引用失效时&#xff0c;计数器值就减一&#xff1…

七夕送礼送什么?数码爱好者送什么礼物?这几件贴心实用又有心意

​在这个数字化的时代&#xff0c;数码产品成为了我们日常生活中必不可少的一部分。而在七夕这个特别的日子里&#xff0c;送上一份数码产品礼物&#xff0c;不仅可以让你的另一半感受到你的用心和关爱&#xff0c;还可以让他/她感受到科技带来的便捷和乐趣。 推荐一&#xff…

贝锐蒲公英:助力企业打造稳定高效的智能安防监控网络

随着技术的快速发展和物联网的普及&#xff0c;企业面临着许多安全威胁和风险&#xff0c;如盗窃、入侵、信息泄露等&#xff0c;企业需要建立安防监控系统来保护其资产、员工和业务运营的安全。 然而&#xff0c;企业在搭建安防监控系统的过程中&#xff0c;可能会面临一些难…

无涯教程-Perl - setnetent函数

描述 该函数应在第一次调用getnetent之前调用。 STAYOPEN参数是可选的,在大多数系统上未使用。当getnetent()从网络数据库的下一行检索信息时,setnetent会将枚举设置(或重置)为主机条目集的开头。 语法 以下是此函数的简单语法- setnetent STAYOPEN返回值 此函数不返回任何…

smardaten实战丨谁说无代码不能开发出漂亮的门户首页?

一、需求背景 门户首页对于一个公司或组织来说是一个极其重要的网站页面&#xff0c;它可以作为访问者了解和获取相关信息的入口&#xff0c;同时也是展示品牌形象和吸引目标受众的重要工具。 开发一个门户首页需要开发团队在向访问者展示关于公司或组织基本信息的基础上&…