vue之动态组件
动态组件就是根据自己的定义来加载显示不同的组件。 关键词是 is
- 引入多个组件
- 在components中注册
<component :is="comContent"></component>中占位显示
<div v-for="(item,index) in lessons" @click="comContent=item.component">{{item.title}}</div>
<component :is="comContent"></component>
// ===========================================
import JsCom from "./components/JsCom.vue";
import VueCom from "./components/VueCom.vue";
import NodeCom from "./components/NodeCom.vue";
// ===========================================
data(){
return {
lessons:[
{title:'js',component:'JsCom'},
{title:'vue',component:'VueCom'},
{title:'node',component:'NodeCom'},
],
comContent:''
}
},
components:{
JsCom,
VueCom,
NodeCom
}
ue的provide和inject
如果多个组件嵌套,数据按照普通组件传值的方法(prop)会很繁琐,vue提供了组件穿透传值的api 使用:在祖先组件中用provide定义数据:
provide(){
return {
website:this.websiteName
}
},
data(){
return {
websiteName:'baidu',
}
},
在后代嵌套的子组件中使用inject接收
<div>
我是孙子组件 --- {{website}}
</div>
export default {
inject:['website']
}
组件缓存keep-alive的使用
当我们使用动态组件的时候,如果组件切换了,会重新渲染,组件的input输入内容都会消失。 如果想缓存组件,可以使用keep-alive 包裹住要缓存的组件,则不会重新渲染。
<keep-alive>
<component :is="comContent"></component>
</keep-alive>
vue通过ref操作组件
ref可以理解为给组件加了一个id,通过ref可以获取到组件,自然就能获得组件上的属性和方法。
- 给某个子组件添加ref属性
- 通过refs.xxx 获取
<Dbutton v-model:value="content" ref="btn"/> // Dbutton是一个子组件
<div @click="getBtnContent"> 获取 Dbutton组件的方法</div>
// =====
methods:{
getBtnContent(){
let value = this.$refs.btn.content
console.log(value) // 这里就是Dbutton组件里的属性
}
},