javascript - 在 Angular 中,一个组件如何拥有多个 HTML 模板?
问题描述
我正在开发一个电子商务应用程序,一个主要特点是这个应用程序应该有多个主题。主题的总数可能是 100 甚至更多。但是,这些主题都有相同的数据(例如:所有主页都有相同的横幅图片、新产品、特色产品数据。)。
我知道我可以使用 ng-template 或 TemplateRef 来确定应该显示哪一段 HTML。但是因为我有超过 100 个主题,所以 ng-template 或 TemplateRef 方法都会加载很多额外的文件。所以我认为我需要某种延迟加载,当组件加载数据时,延迟加载正确的 HTML 模板。那么我怎样才能拥有这份工作呢?
解决方案
看起来有可能,我们所有的路由都由延迟加载的模块处理。这是我们开箱即用的路由配置:
const routes: Routes = [
{ path: '', loadChildren: () => import('./lazy/lazy.module').then(m => m.LazyModule) }
];
虽然模块lazy
具有此路由配置:
const routes: Routes = [
{ path: 'home', component: HomeComponent },
]
WhileHomeComponent
取自 module 的声明lazy
。
然后定义另一个模块,例如lazy-two
使用相同的路由配置调用,以及它自己的HomeComponent
.
最后,您可以使用以下代码在模块之间切换:
lazyLoad() {
const routes: Routes = [
{
path: '',
loadChildren: () => import('./lazy-two/lazy-two.module')
.then(m => m.LazyTwoModule)
}
];
this.router.resetConfig(routes);
this.router.navigateByUrl('/home');
}
这将延迟加载模块lazy-two
并刷新路由/home
- 您将看到显示的新模块的组件。
我无法创建堆栈闪电战,可能由于延迟加载而发生了一些错误。所以我在我的机器上本地运行它并将代码推送到GitHub
编辑我设法制作了StackBlitz
推荐阅读
- php - 在没有 group_concat 的 symfony/doctrine/mysql 中连接行
- blockchain - Litecoin 克隆区块链对等体已连接但未下载块
- javascript - 单击时如何更改一个按钮文本不是所有具有相同类的按钮
- sql - 编写此触发器的巧妙方法
- windows - If 和 copy 的组合失败,语法不正确
- excel - 外部应用程序:循环打开 Excel 中的窗口
- sql - 如何从表中找到时间戳列
- css - 嵌套的弹性盒(在两个维度上)
- intellij-idea - Intelij 不会显示某些 kotlin 类的源代码
- c++ - 如何在 Qt 4.8 问题选项卡中显示 C++ 的所有警告?