【问题标题】:ionic 4 Angular PWA customized urlionic 4 Angular PWA 自定义网址
【发布时间】:2020-02-10 13:02:55
【问题描述】:

我正在使用 Ionic 4 和 Angular 7 开发一个网络应用程序。当我访问我的域时,它会自动重定向到主页。我想使用变量而不是 home

例如

www.mydomain.com/home/school1 to
www.mydomain.com/school1
www.mydomain.com/school2 etc

到目前为止,我的代码中有这个可以工作

    const routes: Routes = [
      {
        path: '',
        redirectTo: 'home',
        pathMatch: 'full'
      },
      {
        path: 'home',
        loadChildren: './home/home.module#HomePageModule',
        canActivate: [BeforeLoginService]
      },
      {
         path: 'home/:school_name',
         loadChildren: './home/home.module#HomePageModule',
         canActivate: [BeforeLoginService]
       }, 
{ 
path: 'school-dashboard', 
loadChildren: './schools/school-dashboard/school-dashboard.module#SchoolDashboardPageModule' },
  { 
path: 'admin-dashboard', 
loadChildren: './admin/admin-dashboard/admin-dashboard.module#AdminDashboardPageModule' },]

到目前为止,我已经尝试了以下代码。这与路由混淆。 router.navigateByUrl 或 router.navigate 在我实现此代码时不起作用

const routes: Routes = [
      {
        path: '',
        redirectTo: 'home',
        pathMatch: 'full'
      },
      {
         path: ':school_name',
         loadChildren: './home/home.module#HomePageModule',
         canActivate: [BeforeLoginService]
       },{ 
path: 'school-dashboard', 
loadChildren: './schools/school-dashboard/school-dashboard.module#SchoolDashboardPageModule' },
  { 
path: 'admin-dashboard', 
loadChildren: './admin/admin-dashboard/admin-dashboard.module#AdminDashboardPageModule' }
      ]

有没有办法像下面这样以角度完成自定义网址

www.mydomain.com/school1 or www.mydomain.com/school2 instead of www.mydomain.com/home/school1

非常感谢任何帮助

【问题讨论】:

  • 你能解释一下你为什么要这样做吗?
  • 这样我的客户可以使用他们的学校名称直接进入他们的部分

标签: angular routing ionic4 progressive-web-apps


【解决方案1】:

你可以试试这个:

const routes: Routes = [
{
  path: '',
  loadChildren: './home/home.module#HomePageModule',
  canActivate: [BeforeLoginService]
},
{
 path: ':school_name',
 loadChildren: './home/home.module#HomePageModule',
 canActivate: [BeforeLoginService]
}]

请查看工作演示 here


更新

请尝试以下路线:

const routes: Routes = [
  {
    path: '',
    loadChildren: './home/home.module#HomePageModule',
    canActivate: [BeforeLoginService]
  },
  {
     path: ':school_name',
     loadChildren: './home/home.module#HomePageModule',
     canActivate: [BeforeLoginService]
  },
  { 
     path: 'school-dashboard', 
     loadChildren: './schools/school-dashboard/school-dashboard.module#SchoolDashboardPageModule' 
  },
  { 
     path: 'admin-dashboard', 
     loadChildren: './admin/admin-dashboard/admin-dashboard.module#AdminDashboardPageModule'
  }
 ];

这样,当用户输入mydomain.com/school1时,应用会显示HomeComponent,即登录页面。从那里,您可以使用 school1 作为参数:

this.activatedRoute.snapshot.paramMap.get('school_name')

通过此参数,您将知道进入了哪个学校,因此您可以显示相关信息,然后对用户进行身份验证。之后,您将不得不使用以下方式导航:

this.router.navigate(['/school-dashboard']);

请注意,如果用户没有在 URL 中输入学校名称,则需要处理,因此参数将为 undefined。您需要显示一些默认值,或者显示另一个页面而不是 HomeComponent。您可以通过将第一个路由更改为指向另一个组件来做到这一点:

{
  path: '',
  loadChildren: './MY_OTHER_COMPONENT_MODULE_PATH#MY_OTHER_COMPONENT_MODULE'
}

【讨论】:

  • 感谢您的回答。但是一旦我更改为 router.navigateByUrl 或 router.navigate 就无法正常工作。但是如果路径是 path: 'home:/school_name' 则可以完美运行。我的主页也是登录页面
  • 你能补充一下你的router.navigateByUrl/router.navigate是什么样的吗?
  • @yazantanhan 我的 router.navigateByUrl 看起来像这样...if(user_type == 'school') { return this.router.navigateByUrl('/school_dashboard') else if(user_type == 'admin') {return this.router.navigateByUrl('/admin_dashboard')}
  • 没有/school_dashboard/admin_dashboard 路由。这个解决方案会发生什么,它将school_dashboard 作为home 组件的参数。但是,当您输入www.mydomain.com/school2 时,它将显示home 页面并将school2 作为参数发送。如果您想将school_dashboardadmin_dashboard 作为路由,则需要将它们添加到routes 变量中。但如果它们只是传递给主页的变量,它应该可以工作
  • 这是个好消息!乐于助人!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-04-10
  • 2019-03-08
  • 2020-03-25
  • 2020-01-16
  • 1970-01-01
  • 2019-12-19
  • 2020-01-27
相关资源
最近更新 更多