我的目标是将desktop页和mobile页分开.原因是desktop页的UX流是"滚动到部分".与此同时,mobile页的用户体验流程是"导航到下一部分".

问题是:

  1. desktop个用户将加载mobile个页面.mobile个用户也是如此.

这是当前解决方案的可视化示意图:

  1. main页和get-device-type服务.
  2. the main page will render the desktop page or the mobile page. enter image description here

我试过的是:

  1. desktop页使用canLoad.

我的期望是:

  1. desktop个用户访问路径checkout/1时,它将加载desktop个页面.
  2. mobile个用户访问路径checkout/1时,它不会加载desktop页面,而是加载mobile页面.

我的实际结果是:

  1. desktop个用户访问路径checkout/1时,它将加载desktop个页面.
  2. mobile个用户访问路径checkout/1时,它不会加载任何页面.

Checkout-page-routing.module.ts

import { NgModule } from '@angular/core';
import { RouterModule, Routes } from '@angular/router';
import { IsDesktopGuard } from '../../../domain/usecases/is-desktop/is-desktop.guard';

const routes: Routes = [
  {
    path: '',
    loadChildren: () => import("../checkout-scroll-page/checkout-scroll-page.module").then(m => m.CheckoutScrollPageModule),
    canLoad: [IsDesktopGuard]
  },
  {
    path: '',
    loadChildren: () => import("../checkout-navigate-page/checkout-navigate-page.module").then(m => m.CheckoutNavigatePageModule)
  }
];

@NgModule({
  imports: [RouterModule.forChild(routes)],
  exports: [RouterModule]
})
export class CheckoutPageRoutingModule { }

推荐答案

你可以根据设备有条件地做loadChildren吗?

const isMobile = {
  Android: function () {
    return navigator.userAgent.match(/Android/i);
  },
  BlackBerry: function () {
    return navigator.userAgent.match(/BlackBerry/i);
  },
  iOS: function () {
    return navigator.userAgent.match(/iPhone|iPad|iPod/i);
  },
  Opera: function () {
    return navigator.userAgent.match(/Opera Mini/i);
  },
  Windows: function () {
    return navigator.userAgent.match(/IEMobile/i) || navigator.userAgent.match(/WPDesktop/i);
  },
  any: function () {
    return (isMobile.Android() || isMobile.BlackBerry() || isMobile.iOS() || isMobile.Opera() || isMobile.Windows());
  }
};

const routes: Routes = [
  {
    path: 'desktop',
    loadChildren: () => {
      if (!isMobile.any()) {
        return import("../checkout-scroll-page/checkout-scroll-page.module").then(m => m.CheckoutScrollPageModule);
      } else {
        return import("../checkout-navigate-page/checkout-navigate-page.module").then(m => m.CheckoutNavigatePageModule);
      } 
     },
  },
];

Javascript相关问答推荐

主要内部的ExtJS多个子应用程序

未捕获错误:在注销后重定向到/login页面时找不到匹配的路由

Spring boot JSON解析错误:意外字符错误

当作为表达式调用时,如何解析方法decorator 的签名?

空的结果抓取网站与Fetch和Cheerio

JSDoc创建并从另一个文件导入类型

如何将Cookie从服务器发送到用户浏览器

我在Django中的视图中遇到多值键错误

类构造函数不能在没有用With Router包装的情况下调用

第三方包不需要NODE_MODULES文件夹就可以工作吗?

使用插件构建包含chart.js提供程序的Angular 库?

无法重定向到Next.js中的动态URL

对具有相似属性的对象数组进行分组,并使用串连的值获得结果

更改agGRID/Reaction中的单元格格式

Pevent触发material 用户界面数据网格中的自动保存

如何在下一个js中更改每个标记APEXCHARTS图表的 colored颜色

设置复选框根据选中状态输入选中值

在范围数组中查找公共(包含)范围

Played link-Initialize.js永远显示加载符号

JS/css:将数字输入的S函数和可调整大小的元素S函数绑定在一起