• Vue.extend()实在是妙啊


    Vue.extend()虽然已经使用过很多次了,但都没有深入思考过这个东西,仔细想了想,有点意思。

    一、使用场景

    1.使得某些功能组件按需加载使用,也叫预加载、懒加载,性能蹭蹭往上走。

    2.可自定义组件并进行扩展,其自由度高到你无法想象。

    二、补充组件注册

    平日里,我们使用组件,注册组件方法:

    1.黄金玩家:

    1. import A from "./A.vue";
    2. export default {
    3. components: {
    4. A
    5. },
    6. }

     2.铂金玩家

    1. import Vue from "vue"
    2. import A from "./A"
    3. Vue.component("A", A)

    3.钻石玩家

    1. import Vue from "vue";
    2. // 检索目录下的模块
    3. const req = require.context(".", true, /\.vue$/);
    4. req.keys().forEach(fileName => {
    5. // require模块
    6. const componentConfig = req(fileName);
    7. const name =
    8. fileName.name ||
    9. fileName.replace(/^\.\/(.*\/)?/, "").replace(/\.vue$/, "");
    10. Vue.component(name, componentConfig.default || componentConfig);
    11. });

    4.王者玩家

    不必多说,今日主角!闪亮登场!

    1. // 创建一个构造器
    2. const Constructor = Vue.extend(test);
    3. // 利用构造函数创建实例
    4. //创建过程中可 向组件中传入数据
    5. const instance = new Constructor({
    6. propsData:{
    7. age:'23'
    8. }
    9. });
    10. // instance.age = 29
    11. // 挂载到某个dom上
    12. instance.$mount(this.$refs.container)

    三、深度解析

    1.聊聊天

            为什么我会对其赞不绝口,我收了钱吗?也有可能。

            回归正题,开始聊这个之前先提一下vue的工作机制,尤其是cli的打包运作。在项目完成后,执行命令打包,只会将项目里用到的 .vue、.js、.css、.json、.svg等等文件进行打包,所以如果你是从老项目迁移开发,原本几百兆的文件夹,打包后可能只有十几二十兆,当然这需要你的懒加载做的比较好。

            上面说的还是有点抽象,说点我们能感知到的。假设你写了下面这么一个组件test.vue,但是你脑子转太快了,以至于手速都跟不上,所以,你犯错了,age没定义你就使用了,那势必会报错对吧?其实并不会,你不导入,不使用它,一点事情没有,它只会在那错下去孤独终老。