动态组件
当需要渲染的组件不是固定的,可以使用动态组件
动态组件是使用 component 组件,通过一个特殊的attribute is 来实现:
is绑定的值:使用component函数注册的全局组件,
或者在当前组件对象的components对象中注册的组件
动态组件父子通信:和使用普通组件一样,将需要传递的数据及监听的事件放到component组件上
keep-alive
keep-alive也是vue内置的组件称为缓存组件,作用是保存当前组件的状态,不被销毁掉
常与动态组件,router-view一起使用
这样在组件间来回切换,组件不会销毁与重建,会保持状态
keep-alive属性
缓存组件的生命周期
异步组件
vue-cli是基于webpack的,当我们打包时,如果没有进行配置,会把所有组件打包到一个app.js文件夹中,当首次渲染时,需要把整个app.js下载下来,造成首屏渲染较慢
webpack的分包
vue中使用异步组件
我们的项目过大了,对于某些组件我们希望通过异步的方式来进行加载(目的是可以对其进行分包处理),那 么Vue中给我们提供了一个函数:defineAsyncComponent
Suspense
Suspense意思是悬疑的,悬而未决的,常与异步组件一起使用
$refs $parent和$root
$refs
vue不推荐我们直接操作dom,当我们想操作元素或者组件时,可以使用$refs
组件实例都有一个$refs属性,是一个对象,持有注册过 ref attribute 的所有 DOM 元素和组件实例。
$parent
$parent访问父元素
$root 访问根元素
注意:在Vue3中已经移除了$children的属性,所以不可以使用了。
生命周期
每个组件都可能会经历从创建、挂载、更新、卸载等一系列的过程,叫做生命周期
生命周期函数是一些钩子函数,在某个时间会被Vue源码内部进行回调; 通过对生命周期函数的回调,我们可以知道目前组件正在经历什么阶段; 那么我们就可以在该生命周期中编写属于自己的逻辑代码了
mixin
代码共享的一种方式(不是数据共享,只是代码共享,让你少些代码,合并到optionsAPI中)
组件和组件之间有时候会存在相同的代码逻辑,我 们希望对相同的代码逻辑进行抽取
Mixin的合并规则
生命周期会放到一个数组中全部调用
data:data中数据名重复,肯定使用当前组件自己的
methods,components:key重复,用自己的
全局混入mixin
当所有组件都有共同代码,可以使用全局混入
全局的Mixin可以使用 应用app的方法 mixin 来完成注册
extends(了解)
extends也是做代码复用的,算是一个历史遗留问题,刚推出时不好用,就又推出了mixin
用法与mixin类似,template不会继承,推荐大家使用mixin