@sanpjs/runtime
Version:
San Pro Runtime
102 lines • 3.7 kB
JavaScript
;
/**
* @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