异步组件,一般用于按需加载。对于一些需要优化首屏加载的,会减少首屏的包体积,一般会将一些首屏组件变成异步组件。异步组件的实现方式有三种:工厂函数,promise异步组件,高级异步组件。
工厂函数
1 | Vue.component('AysnComponent', function (resolve, reject) { |
在定义组件时,使用Vue.component时,第二个参数传递的是一个对象。在这里,定义异步组件的时候,第二个参数传递的是一个函数。
在vue的源码中,会判断传递的第二个参数是否是一个普通的对象,如果是,则会使用extend来创建一个Ctor构造函数。如果不是,则直接将传递的参数挂载在Vue.options.components.AysnComponent(其中的AynsComponent就是定义的名称),通过resolveAsset来创建一个Ctor,这里的Ctor其实就是一个工厂函数(也就是我们传递进去的函数),通过函数resolveAyscComponent(Ctor, baseCtor, context)「其实,Ctor就是我们传递的函数,baseCtor就是Vue,context当前组件的实例vm」
———————————————————————— 华丽的分割线 —————————————————————
「扩展 1 」:once,方法只执行一次的实现方式?
1 | function once (fn: Function): Function { |