【问题标题】:Wildcard route for static content in Angular 7Angular 7中静态内容的通配符路由
【发布时间】:2019-05-16 02:25:00
【问题描述】:

我正在通过学​​习this example app 来学习 Angular 7。示例应用程序使用通配符路由来处理所有其他未处理的路由。

具体来说,这个app-routing.module.ts 将所有杂项路由定向到AppConfig.routes.error404,由Error404PageComponent.ts 处理,然后最终为每个未由其自己的组件和命名路由指定的可能路由提供error404-page.component.html

为了让通配符路由为不同的提交路由提供不同的静态内容,需要对该示例应用中的代码进行哪些具体更改?

例如,如果网络用户输入路由 /i-am-a-jelly-donut,需要进行哪些更改才能使请求 1.) 继续通过 Error404PageComponent.ts,但让用户的浏览器接收新的 @ 987654328@ 而不是 error404-page.component.html 视图?

Error404PageComponent.ts 仍会为每个未指定的路线提供error404-page.component.html。但是,除了每个非指定路由的逻辑之外,我们将添加逻辑以在 Error404PageComponent 内对特定静态路由进行特殊处理。

这里的目标是能够处理静态路由,而不必为每个路由创建单独的组件。例如,考虑一个博客,其中大多数路由具有相同的模板,但每个博客条目中的内容不同。

【问题讨论】:

    标签: javascript angular typescript angular7 angular7-router


    【解决方案1】:

    模板在构建时编译到组件中,您无法更改组件在运行时使用的模板,但您可以根据条件隐藏和显示部分。将路由器注入到您的组件中

    constructor(private router: Router) {}
    

    现在您可以根据路由是否包含“i-am-a-jelly-donut”在组件上设置变量

    jellyDonut = this.router.url.indexOf('i-am-a-jelly-donut') !== -1;
    

    在你的模板中

    <ng-container *ngIf="jellyDonut">
      Jelly Donut
    </ngcontainer>
    
    <ng-container *ngIf="!jellyDonut">
      Other stuff
    </ngcontainer>
    

    【讨论】:

    • 感谢您和 +1 在被询问的级别上回答 OP。你愿意添加评论来指导这个具体的后续行动吗? ...我担心,如果例如网站增长到数百个格式相同的“博客条目”,每个都需要自己的路线,但没有一个保证自己的组件,这可能无法扩展。对于更多路线,我应该研究什么来确定解决此问题的方法?
    • 然后使用路由参数,而不是包罗万象
    • { 路径:':blogId',组件:BlogComponent }
    • 博客组件可以加载属于 blogId 的内容
    • 用例是博客条目,每个条目都需要自己完全指定的搜索引擎路由。从您简短的 2 句话中,我看到 BlogComponent 中数百个路由选项的相同问题。您能否详细说明至少足以让我理解您的建议是什么样的,以便我了解它将如何满足要求?
    猜你喜欢
    • 2019-02-19
    • 2018-11-26
    • 1970-01-01
    • 2014-08-23
    • 1970-01-01
    • 2019-10-17
    • 1970-01-01
    • 2019-05-30
    • 1970-01-01
    相关资源
    最近更新 更多