Vue异步组件Demo

事件驱动
• 阅读 2846

Vue异步组件Demo

在大型应用中,我们可能需要将应用拆分为多个小模块,按需从服务器下载。为了进一步简化,Vue.js 允许将组件定义为一个工厂函数,异步地解析组件的定义。Vue.js 只在组件需要渲染时触发工厂函数,并且把结果缓存起来,用于后面的再次渲染。

下面是我写的一个简单Vue异步组件Demo。

index.html

<!DOCTYPE html>
<html lang="en">

    <head>
        <meta charset="UTF-8">
        <meta name="viewport"
            content="width=device-width, initial-scale=1.0">
        <meta http-equiv="X-UA-Compatible"
            content="ie=edge">
        <title>Document</title>
        <script>
            // 如果浏览器不支持Promise就加载promise-polyfill
            if ( typeof Promise === 'undefined' ) {
                var script = document.createElement( 'script' );
                script.type = 'text/javascript';
                script.src = 'https://cdn.jsdelivr.net/npm/es6-promise@4/dist/es6-promise.auto.min.js';
                document.head.appendChild( script );
            }
        </script>
        <!-- 引入Vue -->
        <script src="https://cdn.jsdelivr.net/npm/vue"></script>
    </head>

    <body>
        <div id="app" style="font-size: 22px">
            <!-- 异步组件async-comp -->
            <async-comp :list="['我是一个异步组件,','如果加载完成,','我就会在这里显示']"></async-comp>
        </div>

        <!-- 引入main.js     -->
        <script src="/main.js"></script>
    </body>

</html>

异步组件Async-Comp.js,

  • 注意,Async-Comp.js并没有在index.html中引用,而是在下面的main.js中动态加载。
window.async_comp = {
    template: '\
        <ol>\
            <li v-for="item in list">{{ item }}</li>\
        </ol>',
    props: {
        list: Array
    }
};

main.js

var vm = new Vue( {
    el: '#app',
    components: {
        /* 异步组件async-comp */
        'async-comp': function () {
            return {
                /** 要渲染的异步组件,必须是一个Promise对象 */
                component: new Promise( function ( resolve, reject ) {
                    var script = document.createElement( 'script' );
                    script.type = 'text/javascript';
                    script.src = '/Async-Comp.js';
                    document.head.appendChild( script );

                    script.onerror = function () {
                        reject( 'load failed!' );
                    }

                    script.onload = function () {
                        if ( typeof async_comp !== 'undefined' )
                            resolve( async_comp );
                        else reject( 'load failed!' )
                    }
                } ),
                /* 加载过程中显示的组件 */
                loading: {
                    template: '<p>loading...</p>'
                },
                /* 出现错误时显示的组件  */
                error: {
                    template: '\
                        <p style="color:red;">load failed!</p>\
                    '
                },
                /* loading组件的延迟时间 */
                delay: 10,
                /* 最长等待时间,如果超过此时间,将显示error组件。 */
                timeout:3200
            }
        }
    }
} )

see github

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Karen110 Karen110
3年前
一篇文章带你了解JavaScript日期
日期对象允许您使用日期(年、月、日、小时、分钟、秒和毫秒)。一、JavaScript的日期格式一个JavaScript日期可以写为一个字符串:ThuFeb02201909:59:51GMT0800(中国标准时间)或者是一个数字:1486000791164写数字的日期,指定的毫秒数自1970年1月1日00:00:00到现在。1\.显示日期使用
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
达里尔 达里尔
3年前
在Vue项目里遇到多次渲染echart组件只显示一个的问题
症状vue项目echarts中出现“Thereisachartinstancealreadyinitializedonthedom.”的警告Vue页面多次渲染echarts封装的组件但只出现一个(如果这个为主要症状)原因:1.有可能是id冲突,如果你注册了N个组件,但是由于是复制粘贴过来的,导致你所有的组件文件echarts容器
不才 不才
3年前
md-loader
mdloader组件文档是如何渲染出来文档用于描述系统功能,而组件文档描述组件的功能,对于前端组件为了直观体现一般会有一个预览模块,而一般组件文档都是采用markdown编写,而md是文本内容且并没有渲染组件代码的能力,那么这是如何做的呢?简单的说就是“自定义结构”,像elementui中对代码的描述为,中间的YOUCODE可以放简单的vue组件代码。这种
CuterCorley CuterCorley
4年前
uni-app开发 经验和技巧总结
前言uniapp是一个基于Vue.js开发所有前端应用的框架,开发者编写一套代码,可发布到iOS、Android、Web(响应式)、以及各种小程序(微信/支付宝/百度/头条/QQ/钉钉/淘宝)、快应用等多个平台。在开发过程中可能会用到一些经验和技巧,可以加速开发,归纳如下。1.自定义组件模板在开发时,很多情况下需要自定义组件,在自
Chase620 Chase620
4年前
Vue面试考点准备02
10\.谈谈你对keepalive的理解是什么?keepalive是Vue提供的一个抽象组件,用来对组件进行缓存,当组件切换时不会进行销毁,从而节省性能。由于是一个抽象组件,所以在页面渲染完毕后不会被渲染成一个DOM元素。1)include定义缓存白名单,keepalive会缓存命中的组件;2)exclude定义缓存黑名单
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
1年前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这
美凌格栋栋酱 美凌格栋栋酱
5个月前
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(
事件驱动
事件驱动
Lv1
想在你的宇宙里,走私很多的浪漫。
文章
5
粉丝
0
获赞
0