angular4+ 中动态路由的配置

发布于 2022-09-07 04:27:15 字数 942 浏览 34 评论 0

问题背景

项目首页需要支持PC端和pad端访问,PC端和PAD端的页面设计图相差太远,基本上没办法用@media搞定。

现在的情况

我设想的解决办法是:在module文件中配置路由时,判断当前的浏览器是否为pad浏览器,代码如下:

function isPad() {
    const ua = navigator.userAgent;
    return (ua.indexOf('Android') > 0 || ua.indexOf('iPhone') > 0 || ua.indexOf('iPad') > 0);
}

const routes: Routes = [];

// 如果是pad浏览器,那么默认就加载Pad端首页
if(isPad()) {
    routes.push({
        path: '',
        component: PadIndexComponent
    });
} else {
     // 加载PC端首页
     routes.push({
        path: '',
        component: PcIndexComponent
    });
}

console.log('===>',routes);

@NgModule({
    imports: [
        CommonModule,
        HttpClientModule,
        RouterModule.forChild(routes),
    ],
   .... 
});

问题

在普通的开发模式下没有问题,AOT的过程中也没有问题,但是运行AOT之后的页面,结果页面一片白,查看了网页源代码,上面配置的2个组件都没有加载到页面中。Console中也没有任何错误,代码中的log方法正常调用。

so. 有人遇到过这样的需求或者场景吗? 是如何解决的呢?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

二货你真萌 2022-09-14 04:27:15

这块没深究,提供另一种方案,在组件内部动态修改路由配置:

export class AppComponent {
    constructor(
        private router:Router
    ){
        //这是整个项目的路由配置
        let config = router.config
        //这里需要自己筛选
        if(this.isPad()){
            config[0].children.push({
                path:'',
                component: PadIndexComponent
            })
        }else{
            config[0].children.push({
                path:'child',
                component:PcIndexComponent
            })
        }
        this.router.resetConfig(config)
    }

    isPad() {
        const ua = navigator.userAgent;
        return (ua.indexOf('Android') > 0 || ua.indexOf('iPhone') > 0 || ua.indexOf('iPad') > 0);
    }
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文