今天学习了vue动态组件、插槽、路由,感觉和微信小程序还有react有很多相似的地方,以后会整理一下。明天也要继续努力

动态组件

vue提供了一个内置的标签,专门用来实现动态组件的渲染


  1. component 标签是 vue 内置的,作用:组件的占位符
  2. is 属性的值,表示要渲染的组件的名字
  3. is 属性的值,应该是组件在 components 节点下的注册名称

动态组件每次被隐藏的组件都会被销毁,再次显示的时候重新创建,可以用keep-alive解决问题,在component外面包一层keep-alive标签,组件被隐藏的时候就是被缓存,不会被销毁

	  

keep-alive对应的生命周期函数:

​ 被缓存的时候,会自动触发deactivated生命周期函数

​ 被激活的时候,会自动触发activated生命周期函数

组件第一次被创建的时候,既会触发created,又会触发activated;切换回来只是执行activated,而不会执行created,因为组件没有被重新创建

keep-alive的include属性:只有匹配属性值的组件才会被缓存 exclude属性:排除项,符合的不被缓存。两个属性二选一,不能同时使用

如果在声明组件的时候,没有为组件指定name名称,则组件的名称默认为注册时候的名称。但是当给组件提供了name属性的时候,组件的名称,就是 name 属性的值

export default {

  name: 'MyRight'

}

对比两个组件名称:

  1. 组件的 “注册名称” 的主要应用场景是:以标签的形式,把注册好的组件,渲染和使用到页面结构之中

  2. 组件声明时候的 “name” 名称的主要应用场景:结合 标签实现组件缓存功能;以及在调试工具中看到组件的 name 名称

插槽

插槽(Slot)是vue为组件的封装者提供的能力,允许开发者咋封装组件时,把不确定的、希望由用户指定的部分定义为插槽

在组件中声明一个插槽区域写在组件的标签之间的内容就会自动渲染到里面去今天学习了vue动态组件、插槽、路由,感觉和微信小程序还有react有很多相似的地方,以后会整理一下。明天也要继续努力_第1张图片

vue 官方规定:每一个 slot 插槽,都要有一个 name 名称 ,如果省略了 slot 的 name 属性,则有一个默认名称叫做 default。

默认情况下,在使用组件的时候提供的内容会填充到default插槽之中。如果把内容填充到指定名称的插槽中,需要使用v-slot指令,v-slot只能加给组件或者template使用,而不能直接加在元素h3身上。template这个标签是个虚拟元素,只有包裹作用,不会被渲染成任何标签

	

v-slot简写为#,可以在组件声明的区域写后备内容,如果用户不提供内容则生效,提供了内容就会被覆盖

如果需要封装组件时预留多个插槽,应该每个插槽都起名字,具名插槽

插槽还可以添加属性,附带自己的数据,用等号接收。