UNPKG

@sanpjs/runtime

Version:

San Pro Runtime

102 lines 3.7 kB
"use strict"; /** * @file San Pro 基础组件类 Lazy san版本在3.10以上支持 * 支持: * 1. 组件异步加载,未加载时可显示占位字符 * 2. 控制组件何时开始加载、延迟指定时间加载 * 使用: * 1. 传入placeholder属性,string类型: * <lazy placeholder="占位文字"></lazy> * 2. 传入load属性,控制是否加载,true加载,false不加载(默认true): * <lazy load="false"></lazy> * 3. 传入list属性,其中每项为lazy加载的组件描述,具体格式如下: * lazyList = [ * { * name: 'ui-content', // 渲染的组件名称,必选 * component: 'content.js', // 组件相对components目录的路径,仅支持js文件 必选 * data: {}, // 组件的数据,可选 * placeholder: 'content placeholder', // 占位组件的文字,可选 * delay: 0 // 延迟加载时间ms,延迟期间仍显示占位文字,可选 * }, * {...} * ]; * <lazy list="{{lazyList}}"></lazy> */ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } }); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); __setModuleDefault(result, mod); return result; }; Object.defineProperty(exports, "__esModule", { value: true }); const san_1 = require("san"); // 异步加载中占位组件 const getPHComponet = (ph = '') => { return (0, san_1.defineComponent)({ template: '<div>{{placeholder}}</div>', initData() { return { placeholder: ph }; } }); }; // 动态生成异步组件 const dynamic = (c) => { const params = { load: () => { return new Promise(resolve => { setTimeout(async () => { // 必须指定/components/路径,参见https://webpack.js.org/api/module-methods/#import-1 const LazyComponent = await Promise.resolve().then(() => __importStar(require( /* webpackChunkName: "lazy-component" */ /* webpackMode: "lazy" */ '/components/' + c.component.replace(/^\.?\//, '')))); resolve(LazyComponent.default); }, c.delay || 0); }); } }; params.placeholder = getPHComponet(c.placeholder); return (0, san_1.createComponentLoader)(params); }; class Lazy extends san_1.Component { static template = ` <div> <template s-if="load" s-for="com in list"> <x-lazy s-is="com.name" data="{{com.data}}"/> </template> <div s-else> {{placeholder}} </div> </div>`; static components = {}; initData() { return { load: true, placeholder: '', list: [] }; } inited() { const list = this.data.get('list'); list.forEach((com) => { Lazy.components[com.name] = dynamic(com); }); } } exports.default = Lazy; //# sourceMappingURL=Lazy.js.map