angular - 动态重定向角度路由以加载动态模块
问题描述
我有一个大问题。我尝试了许多没有结果的解决方案:(我想根据屏幕大小加载一个模块以查看移动视图或 Web 视图。
最接近我的目标的是该代码,但它有很多错误。
当屏幕出现时<768
,我设置http://localhost:4200/
了加载网络但也设置了移动设备。=(
当屏幕>768
和我设置http://localhost:4200/
加载网络。=)
当屏幕出现时<768
,我设置http://localhost:4200/mobile/etc/etc/etc
加载暴徒和网络并重定向到http://localhost:4200/mobile
. =(
当屏幕>768
和我设置http://localhost:4200/web/etc/etc/etc
加载网络。=)
应用程序路由.module.ts
const routes: Routes = [
{
path: 'mobile',
loadChildren: './view/mobile/mobile.module#MobileModule',
canActivate: [MobGuardService],
data: {
preload: false
}
},
{
path: 'web',
loadChildren: './view/web/web.module#WebModule',
canActivate: [WebGuardService],
data: {
preload: false
}
},
{
path: 'error',
loadChildren: './view/error/error.module#ErrorModule',
data: {
preload: false
}
},
{
path: '',
redirectTo: window.innerWidth < 768 ? `/mobile/etc/etc/etc` : `/web/etc/etc/etc`,
pathMatch: 'full'
},
{
path: '**',
redirectTo: window.innerWidth < 768 ? `/mobile/etc/etc/etc` : `/web/etc/etc/etc`
}
];
mob-guard.service.ts
@Injectable({
providedIn: 'root'
})
export class MobGuardService implements CanActivate {
constructor(
private router: Router
) {
}
canActivate() {
if (window.innerWidth >= 768) {
this.router.navigate(['/']).then();
return false;
}
return true;
}
}
web-guard.service.ts
@Injectable({
providedIn: 'root'
})
export class WebGuardService implements CanActivate {
constructor(
private router: Router
) {
}
canActivate() {
if (window.innerWidth < 768) {
this.router.navigate(['/m/']).then();
return false;
}
return true;
}
}
我的目标很简单,但我不知道该怎么做:
- 当屏幕为 '<768' 并放置 localhost:4200 rediretTo 并仅加载模块 mobile
- 当屏幕为 '>768' 并放置 localhost:4200 rediretTo 并仅加载模块 web
- 当屏幕为 '<768' 并放置 localhost:4200/mobile/etc/etc/etc rediretTo 并仅加载模块 mobile
- 当屏幕为 '>768' 并放置 localhost:4200/ mobile /etc/etc/etc 时仅加载模块 web 但重定向到 localhost:4200/ web /etc/etc/etc
- 当屏幕为“<768”并放置 localhost:4200/ web /etc/etc/etc 时,仅加载模块 mob 但重定向到 localhost:4200/ mobile /etc/etc/etc
我尝试实现这样的东西,但dosent有效:
{
path: window.innerWidth < 768 ? 'm' : 'w',
loadChildren: window.innerWidth < 768 ? './view/mob/mob.module#MobModule' : './view/web/web.module#WebModule',
canActivate: window.innerWidth < 768 ? [MobGuardService] : [WebGuardService],
data: {
preload: false
}
}
我希望有所帮助。谢谢你的时间。
解决方案
您可以制作一个根组件,您可以在其中添加检查窗口内部宽度的检查,并且可以相应地重定向您的窗口视图或移动视图。
@component({
selector:'app-home',
template:'',
})
constructor(private rout:router){
if(window.innerWidth>768){
this.rout.navigate(['/window'])
}else{
this.rout.navigate(['/mobile'])
}
}
推荐阅读
- python - tf.keras.layers.pop() 不起作用,但 tf.keras._layers.pop() 起作用
- hyperledger - Hyperledger Iroha - 用例场景
- java - Vert.x IO Blocking 操作性能
- ios - SWRevealViewController 向呈现的视图控制器添加手势
- c - 将索引放在指针后面的 [] 括号内是什么意思?
- excel - Outlook Vba 在 Excel 宏中设置屏幕更新
- javascript - 数组有 5 个对象,每个对象都有另外 5 个对象的数组属性。我正在尝试创建查找具有 ID 的对象的函数
- python - 运行 python 脚本的 subprocess.Popen() 未显示 input() 提示
- javascript - 如何修复:TypeError:无法在我的代码上读取 null 的属性“加入”?
- c# - 在 ASP.NET 中的 while 循环内延迟操作(异步)