【问题标题】:Is it possible to build add routes dynamically in angular 2? [duplicate]是否可以在角度 2 中动态构建添加路线? [复制]
【发布时间】:2017-03-21 13:04:58
【问题描述】:

我正在构建一个 cms,用户可以在其中选择要使用的页面。因此,如果用户想要一个联系页面,他们选择它并为其填写一些内容,他们的网站将有一个 contact 路由。基于此,是否可以根据用户是否想要特定页面以角度动态添加路由?

【问题讨论】:

    标签: angular


    【解决方案1】:

    是的。有多种方法可以实现您想要的。您可以使用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

    Dynamically Creating Components

    Another article on dynamically creating components

    【讨论】:

    • 谢谢。你是动态创建路由还是动态创建组件?
    • 我对两者都进行了试验。我最终采用的解决方案是使用通配符路由动态创建组件,其中请求的路由路径与数据库中的模板匹配。对我来说,这是我所拥有的要求和截止日期最简单的。不过,这个话题现在记录得更多了,如果我重新做,我可能会动态创建路由来匹配要渲染的组件。
    • 确实需要提前了解组件吗?因此,如果我想拥有一个联系人组件,我必须在我的 Angular 应用程序中已经定义了一个 ContactComponent,对吗?
    • 不一定,我不相信。您可以使用componentFactory 在运行时创建组件。这是另一篇关于如何创建组件的示例:blog.lacolaco.net/post/dynamic-component-creation-in-angular-2
    • 我在 Angular 9 中尝试过这个解决方案,但没有出现。问题是我有一个默认路径:'',因此 **push() 不起作用。我使用 unshift() 函数将新路由放在数组的开头。
    猜你喜欢
    • 2016-01-28
    • 1970-01-01
    • 2018-08-11
    • 1970-01-01
    • 2018-10-11
    • 2019-07-04
    • 1970-01-01
    • 1970-01-01
    • 2016-07-20
    相关资源
    最近更新 更多