【发布时间】:2017-03-21 13:04:58
【问题描述】:
我正在构建一个 cms,用户可以在其中选择要使用的页面。因此,如果用户想要一个联系页面,他们选择它并为其填写一些内容,他们的网站将有一个 contact 路由。基于此,是否可以根据用户是否想要特定页面以角度动态添加路由?
【问题讨论】:
标签: angular
我正在构建一个 cms,用户可以在其中选择要使用的页面。因此,如果用户想要一个联系页面,他们选择它并为其填写一些内容,他们的网站将有一个 contact 路由。基于此,是否可以根据用户是否想要特定页面以角度动态添加路由?
【问题讨论】:
标签: angular
是的。有多种方法可以实现您想要的。您可以使用router.resetConfig 使用新配置重置路由器的配置:
this.router.resetConfig([
{ path: 'somePath', component: SomeComponent},
...
]);
您也可以push 路由到配置:
this.router.config.push({ path: 'somePath', component: SomeComponent });
我这样做的另一种方法是,我已经让用户可以使用 TinyMCE 之类的东西构建页面并指定他们希望页面具有的 url 路径。在 Angular 中,我在路由器中使用{ path: '**', component: ComponentBuilder } 指定了一个通配符路由,其中 ComponentBuilder 组件将从数据库中获取与某人请求的路径相对应的模板,然后使用该模板动态生成组件。如果数据库中不存在模板,则呈现普通的Page cannot be found 模板。
两种方式都有效。这取决于您希望应用程序如何运行以及如何构建用户创建的页面。
自从我在版本 2 rc4 中提出解决方案以来,有更多关于如何创建动态组件的文档和示例。这些我都没用过,但看起来很有帮助:
NPM package for Dynamic Components
Angular Docs on Dynamic Component Loader
【讨论】:
componentFactory 在运行时创建组件。这是另一篇关于如何创建组件的示例:blog.lacolaco.net/post/dynamic-component-creation-in-angular-2