依赖注入
通常情况下,父组件向孙组件传递数据,可以采用父子props 层层传递,也可以使用bus 和Vuex 直接交互。在Vue2.2.0之后,Vue还提供了provide/inject 选项 父级提供provide方法,供所有后代使用
provide:{
msg:"app组件的数据"
},
后代用inject方法接受
inject:["msg"],
中央事件总线 $bus
配置全局事件总线 $bus 必须在页面挂载之前
Vue.prototype.$bus=new Vue({})
动态组件
component 标签的 is属性语法:is后跟组件的变量名决定使用哪个组件来渲染 注意: is是组件名 :is是data中的变量中保存的组件名
<template>
<div>
<!-- <Nav></Nav>
<Nav2></Nav2>
<Nav3></Nav3> -->
<!-- 官方提供的标签 component -->
<!-- 这里is可以写标签名,写的是啥就是啥 -->
<!-- <component is="b"></component> -->
<!-- 这里绑定属性 -->
<div @click="fn('Nav')" class="box" style="background-color: aqua;">点击</div>
<div @click="mymsg='Nav2'" class="box" style="background-color: bisque;">点击</div>
<div @click="mymsg='Nav3'" class="box" style="background-color: pink;">点击</div>
<component :is="mymsg"></component>
</div>
</template>
<script>
import Nav from "@/com/Nav.vue"
import Nav2 from "@/com/Nav2.vue"
import Nav3 from "@/com/Nav3.vue"
export default {
data() {
return {
arr: [true, false, false],
mymsg: "Nav"
}
},
methods: {
},
components: {
Nav,
Nav2,
Nav3
},
methods: {
fn(index) {
this.mymsg = index
}
},
mounted() {
}
};
</script>
<style>
.box {
width: 80px;
height: 40px;
margin-top: 5px;
line-height: 40px;
text-align: center;
}
</style>
组件缓存
keep-alive是vue内置的一个组件,能够实现指定组件状态的缓存
当组件进行切换时,默认会进行销毁,再切换回去时会是一个重新渲染的组件,但如果我们希望切换回这个组件时状态不变,就可以使用keep-alive来实现 被keep-alive包含的组件不会重新初始化,也不会重新走生命周期函数,但我们可能会希望我们缓存的组件在再次渲染时能做一些事情,vue为此提供了两个钩子函数activated和deactivated,写在被缓存的组件内 activated() 当keepalive包含的组件再次渲染时触发 deactivated() 当keepalive包含的组件销毁时触发
keep-alive的使用
<keep-alive>
<component />
</keep-alive>
keep-alive可以接收三个属性作为参数进行匹配对应的组件进行缓存
1.include 包含的组件 可以写组件名字符串 也可以写正则 2.exclude 排除的组件 可以写组件名字符串 也可以写正则 3.max缓存组件的最大值 可以为字符或者数字
<keep-alive include="a,b">
<component />
</keep-alive>
<keep-alive exclude="c">
<component />
</keep-alive>
<keep-alive include="a,b" exclude="b">
<component />
</keep-alive>
<keep-alive exclude="c" max="5">
<component />
</keep-alive>
|