懒加载模块
懒加载模块从 Framework7 版本 3.4.0 开始可用。
懒加载模块提供了一种方法,通过仅加载主页/视图所需的功能来使您的 Web 应用启动时间更快,并在导航到使用它们的页面时加载额外的模块/组件。这将使您的初始应用脚本和样式的大小更小,这在您构建 Web 应用或 PWA 时非常重要。
Framework7 提供了两种类型的模块。ES 模块和“浏览器模块”。要使用 ES 模块,您需要使用支持 Webpack 或 Rollup 的打包器。import/export
浏览器模块仅设计用于在您不使用任何打包器时使用。
模块 API
要加载 Framework7 模块后置在初始化时我们需要使用以下应用方法:
app.loadModule(module)- 加载模块
- module- 以下之一:
- 对象包裹Framework7 插件
- 函数返回Framework7 插件
- 字符串模块名称以加载(例如'searchbar'
)
- 字符串模块路径以加载(例如'path/to/components/searchbar.js'
)
方法返回 Promise
app.loadModules(模块)- 加载模块
- 模块- 模块数组,其中每个数组项是上述之一
方法返回 Promise
ES 模块
如果您使用 Webpack 或 Rollup 等打包器,此方法才会工作。
首先,我们需要确定我们的应用需要显示初始页面所需的模块并导入它们:
// import core framework with core components only:
import Framework7 from 'framework7';
// import framework7 modules/components we need on initial page
import Searchbar from 'framework7/components/searchbar';
import Accordion from 'framework7/components/accordion';
// install core modules
Framework7.use([Searchbar, Accordion]);
// init app
var app = new Framework7({
// f7 params
});
之后,当我们需要安装额外的 F7 模块时,我们可以使用动态导入:
import('framework7/components/gauge')
.then(module => app.loadModule(module.default))
.then(() => {
// module loaded and we can use gauge api
app.gauge.create(/* ... */)
})
如果我们需要一次加载几个模块:
Promise
.all([
import('framework7/components/gauge'),
import('framework7/components/calendar')
])
.then((modules) => {
// loaded module will be at ".default" prop of import result
var modulesToLoad = modules.map(module => module.default);
return app.loadModules(modulesToLoad);
})
.then(() => {
// modules loaded and we can use their api
app.gauge.create(/* ... */)
app.calendar.create(/* ... */)
})
每次都写可能不太方便,所以我们可以为此制作一个函数:
function loadF7Modules(moduleNames) {
var modulesToLoad = moduleNames.map((moduleName) => {
return import(`framework7/components/${moduleName}`);
});
return Promise.all(modulesToLoad)
.then((modules) => {
return app.loadModules(modules.map(module => module.default));
})
}
我们可以使用它:
loadF7Modules(['gauge', 'calendar']).then(() => {
// modules loaded and we can use their api
app.gauge.create(/* ... */)
app.calendar.create(/* ... */)
});
如果我们需要为特定路由预加载模块,路由的async
是最佳选择:
var routes = [
{
path: '/',
url: './index.html',
},
/* Page where we need Gauge and Calendar modules to be loaded */
{
path: '/gauge-calendar/',
async: function ({ resolve }) {
// load modules
loadF7Modules(['gauge', 'calendar']).then(() => {
// resolve route
resolve({
componentUrl: './gauge-calendar.html',
});
});
}
}
]
以下 ES 模块组件可用于导入(所有其他组件都是核心的一部分):
组件 | 路径 |
---|---|
对话框 | framework7/components/dialog |
弹出窗口 | framework7/components/popup |
登录屏幕 | framework7/components/login-screen |
弹出框 | framework7/components/popover |
动作 | framework7/components/actions |
表单 | framework7/components/sheet |
提示 | framework7/components/toast |
预加载器 | framework7/components/preloader |
进度条 | framework7/components/progressbar |
可排序 | framework7/components/sortable |
滑动删除 | framework7/components/swipeout |
手风琴 | framework7/components/accordion |
联系人列表 | framework7/components/contacts-list |
虚拟列表 | framework7/components/virtual-list |
列表索引 | framework7/components/list-index |
时间线 | framework7/components/timeline |
标签页 | framework7/components/tabs |
面板 | framework7/components/panel |
卡片 | framework7/components/card |
芯片 | framework7/components/chip |
表单 | framework7/components/form |
输入 | framework7/components/input |
复选框 | framework7/components/checkbox |
单选按钮 | framework7/components/radio |
开关 | framework7/components/toggle |
范围 | framework7/components/range |
步进器 | framework7/components/stepper |
智能选择 | framework7/components/smart-select |
网格 | framework7/components/grid |
日历 | framework7/components/calendar |
选择器 | framework7/components/picker |
无限滚动 | framework7/components/infinite-scroll |
下拉刷新 | framework7/components/pull-to-refresh |
数据表格 | framework7/components/data-table |
FAB | framework7/components/fab |
搜索栏 | framework7/components/searchbar |
消息 | framework7/components/messages |
消息栏 | framework7/components/messagebar |
Swiper | framework7/components/swiper |
照片浏览器 | framework7/components/photo-browser |
通知 | framework7/components/notification |
自动完成 | framework7/components/autocomplete |
提示框 | framework7/components/tooltip |
计量表 | framework7/components/gauge |
骨架 | framework7/components/skeleton |
饼图 | framework7/components/pie-chart |
面积图 | framework7/components/area-chart |
字体排印 | framework7/components/typography |
文本编辑器 | framework7/components/text-editor |
面包屑 | framework7/components/breadcrumbs |