角度路由疑难解答

Posted

技术标签:

【中文标题】角度路由疑难解答【英文标题】:Troubleshooting Angular routing 【发布时间】:2018-02-13 08:01:15 【问题描述】:

我的 Angular 路由有什么问题?

我有以下有效的网址:

/marketplace/promotions

但是,这给了我一个 404:

/marketplace/promotions/create

app-routing.module:

export const routes: Routes = [
    
        path: '',
        component: HomeLayoutComponent,
        children: [
             path: 'marketplace', loadChildren: 'app/feature/marketplace/marketplace.module#MarketplaceModule' ,
        ]
    ,
     path: '**', component: NotFoundComponent ,

marketplace.module

const routes: Routes = [
    
        path: '',
        children: [
            
                path: '', redirectTo: 'promotions', pathMatch: "full"
            ,
            
                path: 'promotions', component: PromotionHomeComponent, pathMatch: "full",
                children: [
                    
                        path: 'create', component: PromotionCreateComponent
                    ]
            ,
        ]
    

];

更新

我尝试从“促销”路径中删除路径匹配,但在尝试访问 /create url 时,我访问了我的 PromotionHomeComponent 组件。

我的 PromotionHomeComponent 中没有路由器插座。我希望它会使用主站点标头路由器插座?

404 表示它重定向到我的 NotFoundComponent。我已经更新了我的路由模块以显示它是如何适应的。

我的控制台中没有错误或消息。

这一切都是通过 ng serve 发生的——我所有的其他路线看起来都还可以

【问题讨论】:

没有路由器出口就无法工作,这就是子路由的全部目的,创建从父路由继承的骨架和嵌套路由。 哦,那么我该如何实现我想要做的事情呢?不使用子路由? 如果它没有从 PromotionHomeComponent 继承模板,那么它不是一个嵌套的子组件,如果您希望该特定路径指向创建组件,只需编写整个路径promotions/create 谢谢,出于某种原因,我认为路径中不能有“/”...! 【参考方案1】:

如果您使用的是嵌套路由,即(在子属性中使用子属性)。您需要添加一个<router-outlet> 标签——在您的情况下,您必须在文件marketplace.component.html 和promotionhome.component.html 中使用它。通过这样做,您可以解决路由完成的问题。

但可能存在一个问题——PromotionHomeComponent 的内容将同时显示在 PromotionHomeComponent 和 PromotionCreateComponent 中。作为解决方案,您需要创建一个额外的组件以具有单个 <router-outlet> 标记。

请看Angular 5 routerLink between parent component and other parent - child component

我对您的任务的解决方案是将marketplace.module 中的路线内容更改为:

const routes: Routes = [
        
            path: '',
            component: MarketplaceComponent,
            children: [
                
                    path: 'promotions', component: PromotionHomeComponent
                ,
                
                    path: 'promotions/create', component: PromotionCreateComponent
                
            ]
        

    ];

这样您就可以使用/marketplace/marketplace/promotions/marketplace/promotions/create 从任何地方访问它们

【讨论】:

【参考方案2】:
path: 'promotions', component: PromotionHomeComponent, pathMatch: "full"

删除pathMatch

您是否将路由器插座放入您的 PromotionHomeComponent ? 404到底是什么意思?它是在部署后由服务器返回,还是在使用 ng serve 时返回?什么是控制台日志?

【讨论】:

以上是关于角度路由疑难解答的主要内容,如果未能解决你的问题,请参考以下文章

i=i++; i=++i;从虚拟机角度解答

i=i++; i=++i;从虚拟机角度解答

i=i++; i=++i;从虚拟机角度解答

i=i++; i=++i;从虚拟机角度解答

i=i++; i=++i;从虚拟机角度解答

第一篇Active Directory疑难解答概述