vue动态组件

  • 动态组件指的是动态切换组建的显示与隐藏

component 标签

  • vue提供一个内置的`组件`,专门实现动态组件的渲染
  • 其实就是一个组件的占位符

  • 简单实例
  • 通过绑定注册的组件名称来动态切换组件显示
<template>
  <div class="app-container">
    <h1>App 根组件</h1>
    <hr />

    <div class="box">
	  <component :is="comName"></component>
    </div>
  </div>
</template>

<script>
import Left from './components/Left.vue'
import Right from './components/Right.vue'
export default {
	components: {
		Left,
		Right
	},
	data() {
		return {
			comName: 'Right'
		}
	},
} 
</script>

<style lang="less">
.app-container {
  padding: 1px 20px 20px;
  background-color: #efefef;
}
.box {
  display: flex;
}
</style>

keep-alive的使用

  • 切换组件之后被隐藏的组件被干掉之后,数据被重置了

  • keep-alive防止组件在隐藏时不被销毁,包裹住想要缓存的组件

keep-alive>
<component :is=“comName”>
</keep-alive>

<template>
  <div class="app-container">
    <h1>App 根组件</h1>
    <hr />

    <div class="box">
	  <keep-alive>
		  <component :is="comName"></component>
	  </keep-alive>
    </div>
	<div>
		<button @click="comName = 'Left'">显示Left组件</button>
		<button @click="comName = 'Right'">显示Right组件</button>
	</div>
   </div>
</template>
 

<script>
import Left from './components/Left.vue'
import Right from './components/Right.vue'
export default {
	components: {
		Left,
		Right
	},
	data() {
		return {
			comName: 'Right'
		}
	},
} 
</script>

keep-alive对应的生命周期

只有组件添加了keep-alive时才会有这两个生命周期

  • 对应的组件被隐藏了触发 deactivated
deactivated() {
	console.log("组件被缓存了");
},
  • 对应的组件被隐藏了触发 activated
  • 组件第一次被执行的时候create和activated都会被执行
activated() {
	console.log("组件被激活了");
}

keep-alive的include和exclude(不能同时使用)

  • 默认被标签包裹的所有组件都会被缓存
  • include多个组件时用逗号分割
 <keep-alive include="Right,Left">
  	<component :is="comName"></component>
 </keep-alive>
  • exclude和include不能一起使用
<keep-alive exclude="Left">
 	 <component :is="comName"></component>
 </keep-alive>

组件注册名称和组件声明时的name的区别

  • 子组件内如果声明了name为第一优先级
<script>
export default {
	name:'MyRight'
}
</script>
  • 如果子组件没有声明name则以父组件内注册的名字
  • 注册名称只是为了我们以标签的方式使用
export default {
	components: {
		Right
	}
} 
</script>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值