动态组件、组件缓存

动态组件

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

需求:完成一个注册功能页面,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>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值