动态组件、组件缓存

news/2024/7/10 2:49:47 标签: vue

动态组件

多个组件使用一个挂载点,并动态切换,就是动态组件

需求:完成一个注册功能页面,2个按钮,一个填写注册信息,一个填写用户简介信息 

步骤

  • 定义两个组件 UserName.vue,UserInfo.vue 2个组件
  • 引入到 App.vue组件中
  • data中定义变量来存放要显示的组件名
  • 要设置挂载点 <component>,使用 is 属性来设置要显示哪个组件
  • 点击按钮,修改变量里的组件名

App.vue

<template>
  <div>
    <button @click="comName = 'UserName'">账号密码</button>
    <button @click="comName = 'UserInfo'"> 个人信息 </button>
    <p> 下面显示动态切换组件 </p>
    <div style=" border: 1px solid red;">
      <component :is="comName"></component>
    </div>
  </div>
</template>

<script>
/*
同一个挂载点要切换不同组件  显示
    1. 创建要切换的组件  标签+样式
    2. 引入到要展示的vue文件内,注册
    3. 变量  承载要显示的组件名
    4. 设置挂载点  <component :is="变量"></component>
    5. 点击按钮 切换comName值为要显示的组件名
*/
import UserName from './components/UserName.vue'
import UserInfo from './components/UserInfo.vue'
export default {
  data() {
    return {
      comName: 'UserName',
    }
  },
  methods: {

  },
  components: {
    UserName,
    UserInfo,
  }
}
</script>

 UserName.vue

<template>
    <div>
        <p>用户名:<input type="text"></p>
        <p>密码:<input type="password" name="" id=""></p>
    </div>
</template>

<script>
export default {
}
</script>

<style scoped></style>

UserInfo.vue

<template>
    <div>
        <p>人生格言 个人习惯</p>
    </div>
</template>

<script>
export default {

}
</script>

<style scoped></style>

缺点:要切换的组件很多时,要在根组件引入很多组件

组件动态不常用,组件路由更常用

组件缓存 

组件切换会导致组件被频繁的销毁和重新创建性能不高

使用vue内置的keep-alive组件,可以让包裹的组件保存在内存中不被销毁

演示:给UserName.vue 和 UserInfo.vue 注册created 和 destroyed 生命周期事件,观察创建和销毁的过程

使用 keep-alive 内置的vue组件,让动态组件缓存

语法:

        Vue内置的keep-alive组件,包裹要频繁切换的组件

App.vue

    <div style=" border: 1px solid red;">
      <!-- vue内置的keep-alive组件,把包起来的组件缓存起来 -->
      <keep-alive>
        <component :is="comName"></component>
      </keep-alive>
    </div>

补充生命周期

activated  激活时触发

deactivated  失去激活状态触发

<template>
    <div>
        <p>用户名:<input type="text"></p>
        <p>密码:<input type="password" name="" id=""></p>
    </div>
</template>

<script>
export default {
    created() {
        console.log('UserName创建');
    },
    destroyed() {
        console.log('UserName销毁');
    },
    // 组件缓存下 多了两个钩子函数
    activated() {
        console.log("activated");
    },
    deactivated() {
        console.log("deactivated");
    }
}
</script>


http://www.niftyadmin.cn/n/456541.html

相关文章

WIFI安全接入认证

WiFi的安全接入是通过以下几种技术和协议实现&#xff1a; 一、加密 WiFi的加密技术包括WEP&#xff08;Wired Equivalent Privacy&#xff09;、WPA&#xff08;WiFi Protected Access&#xff09;和WPA2等&#xff0c;用于保护WiFi网络传输过程中的数据安全。其中&#xff0c…

Java实现加密(五)Base64编码

目录 一、Base64是怎么诞生的二、Base64定义三、Base64原理1.ASCII码转Base64&#xff08;字节数 % 3 0&#xff09;2.ASCII码转Base64&#xff08;字节数 % 3 2&#xff09;3.ASCII码转Base64&#xff08;字节数 % 3 1&#xff09;4.UTF-8转Base64 四、Java实现Base64编解码…

C语言实现排序算法的六种方式

1、冒泡法 void Sort(int *pData,int count) {int temp;int i,j;for(i0;i<count;i){for(j0;j<count-i-1;j){if(pData[j]>pData[j1]){temppData[j];pData[j]pData[j1];pData[j1]temp;}}} }int main() {int data[]{10,9,8,7,6,5,4}; Sort(data,7);int i;for(i0;i<7;…

Spark中python和jvm的通信杂谈--ArrowConverter

背景 要提起ArrowConverters&#xff0c;就得说起Arrow这个项目&#xff0c;该项目的初衷是加速进程间的数据交换&#xff0c;从目前的社区发展以及它的周边来看&#xff0c;其实是一个很不错的项目。 那为什么Spark要引入Arrow呢&#xff1f;其实还得从Pyspark中python和jvm的…

QT学习之旅 - network连接

文章目录 网络知识点IP地址IPv4和IPv6 端口号(协议端口)端口分类UDP端口和TCP端口 networkpro文件.h文件.cpp文件 UDP连接绑定端口绑定成功后等待对方进行连接点击发送源码扩展: nodejs-udp服务端(用于跟QT程序进行通信)现象 网络知识点 IP地址 192.168.127.170(√) 192.168.…

侯捷——1.C++面向对象高级开发 总结

侯捷——1.C面向对象高级开发 总结 前面的几个视频没有总结&#xff0c;等以后有空再补 7. Class with pointer member(s) —— string 类 该string类&#xff0c;内含指针&#xff0c;所以要自己写构造函数和析构函数&#xff0c;不能使用默认的构造函数和析构函数。 包含…

Codeforces Round 877 (Div. 2) A~D

Codeforces Round 877 (Div. 2) A. Blackboard List 题意&#xff1a;给两个数&#xff0c;两个差的绝对值为新数&#xff0c;现给出最后的结果&#xff0c;问一开始的两个数的其中一个为什么。 思路&#xff1a;首先负数无法通过绝对值得出&#xff0c;因此如果有负数就选负…

Doris-简介、架构、编译、安装和数据表的基本使用

目录 1、Doris简介2、Doris网址3、Doris架构3、编译和安装 3.1、软硬件需求3.2、编译 3.2.1、安装Docker环境3.2.2、使用Docker 开发镜像编译3.3、集群部署 3.3.1、创建目录并拷贝编译后的文件3.3.2、部署 FE 节点3.3.3、配置 BE 节点3.3.4、在 FE 中添加所有 BE 节点3.3.5、启…