Angular 2 пример маршрутизации модуля функций

Что касается маршрутизации Angular 2, я в основном смог найти примеры сценария, в котором есть только один файл маршрутизации для всего приложения.

Я бы хотел увидеть пример использования не только одного файла маршрутизации, но и основного файла маршрутизации, а затем, по крайней мере, одного файла маршрутизации функционального модуля.

Изменить. Я понимаю, что несколько схожий вопрос уже задан и ответил. Есть две причины, почему я не считаю, что это особенно полезно:

1) Вопрос очень специфичен для этой ситуации пользователя, и поэтому существует много "шума". Все, что я прошу, это один единственный пример маршрутизации модуля функций.

2) Ответы на этот вопрос, похоже, не касаются того, как создать файл маршрутизации для функционального модуля, а затем привязать его к основной маршрутизации приложения. Может быть, там, и я просто пропустил его, но я не вижу его там.

Ответы

Ответ 1

Посмотрите, содержит ли этот пример то, что вы ищете.

Это используемые модули:

  • AppModule (корневой модуль)
  • UserModule (функциональный модуль)

Ниже приведены фрагменты ниже.

app.module.ts

import { UsersModule } from './users.module';
import { AppRouting } from './app.routing';

@NgModule({
  imports: [
    BrowserModule,
    UsersModule,
    AppRouting,
  ],
  declarations: [...],
  providers: [...],
  bootstrap: [ AppComponent ]
})
export class AppModule { }

app.routing.ts

const appRoutes: Routes = [
  { path: '', redirectTo: 'home', pathMatch: 'full' },
  { path: 'home', component: Home },
  { path: '**', component: NotFound }, //always last
];

export const AppRouting = RouterModule.forRoot(appRoutes, { 
  useHash: true
});

users.module.ts

import { NgModule } from '@angular/core';
import { UsersRouting } from './users.routing';

@NgModule({
  imports: [
    CommonModule, // ngFor, ngIf directives
    UsersRouting,
  ],
  declarations: [...],
  providers: [...]
})
export class UsersModule { }

users.routing

const usersRoutes: Routes = [
  { path: 'users',
    children: [
      { path: '', component: Users },
      { path: ':id', component: User }
    ]
  }
];

export const UsersRouting = RouterModule.forChild(usersRoutes);

Plunker: http://plnkr.co/edit/09Alm0o4fV3bqBPUIFkz?p=preview

Пример кода включает также AboutModule (ленивый загруженный модуль, включает в себя пример разрешения), но не включает пример общего модуля.

Вы можете найти более подробную информацию на этих слайдах: https://slides.com/gerardsans/ngpoland-amazing-ng2-router

Ответ 2

Вот пример того, как я обрабатываю свою маршрутизацию с помощью дочерних маршрутов. Я думаю, это поможет вам и научит вас использовать дочерние маршруты для предоставления Guard для некоторых ваших компонентов. Это обеспечит некоторые представления, если у пользователя отсутствует аутентификация. Я разделяю шахту в public и secure маршрутизируя все через макет, затем загружая маршруты, для которых выбирается когда-либо макет.

Обязательно экспортируйте дочерние маршруты и укажите правильные маршруты в макете. Также убедитесь, что вы используете redirectTo в каждом файле дочерних маршрутов.

Мы определяем наши макеты общедоступными или безопасными. Затем предоставление файла маршрутов в каждом из этих каталогов, чтобы захватить один раз, когда выбран маршрут создания.

app.routing.ts

const APP_ROUTES: Routes = [
    { path: '', redirectTo: '/home', pathMatch: 'full', },
    { path: '', component: PublicComponent, data: { title: 'Public Views' }, children: PUBLIC_ROUTES },
    { path: '', component: SecureComponent, canActivate: [Guard], data: { title: 'Secure Views' }, children: SECURE_ROUTES }
];

Затем у меня есть папка макетов

Макеты

layouts/public/public.components.ts
layouts/public/public.components.html
layouts/secure/secure.components.ts
layouts/secure/secure.components.html

secure.component.ts, который выглядит так,

import { Component, OnInit }        from '@angular/core';
import { Router }                   from '@angular/router';
import { Auth }                     from './../services/auth.service';

@Component({
    providers: [ Auth ],
    selector: 'app-dashboard',
    templateUrl: './secure.component.html'
})
export class SecureComponent implements OnInit {

    constructor( private router: Router, private auth: Auth ) { }

    ngOnInit(): void { }
}

Затем в вашем безопасном каталоге вы можете создать компонент и выбрать шаблон, который вы будете использовать для него,

@Component({
    providers: [ Auth ],
    templateUrl: './profile.component.html'
})
export class ProfileComponent implements OnInit {

    constructor( private router: Router, private auth: Auth, private http: Http  ) { }

    ngOnInit() { }
}

Теперь не забудьте создать дочерние маршруты в безопасном и общедоступном каталоге. Как только маршрут будет удален, дочерний маршрут загрузит правильный класс и файл шаблона будет отображаться.

Помните, что они будут детьми ваших макетов. Таким образом, вы можете поместить панель навигации и нижний колонтитул в secure.component.html, и она будет отображаться во всех ваших защищенных компонентах. Потому что мы используем селектор для загрузки содержимого. Все ваши защищенные и общедоступные компоненты будут загружены в селектор в файле макетов html.

дочерние маршруты /public/piublic.routes.ts

export const PUBLIC_ROUTES: Routes = [
    { path: '', redirectTo: 'home', pathMatch: 'full' },
    { path: 'p404', component: p404Component },
    { path: 'e500', component: e500Component },
    { path: 'login', component: LoginComponent },
    { path: 'register', component: RegisterComponent },
    { path: 'home', component: HomeComponent }
];

/secure/secure.routes.ts

export const SECURE_ROUTES: Routes = [
    { path: '', redirectTo: 'overview', pathMatch: 'full' },
    { path: 'items', component: ItemsComponent },
    { path: 'overview', component: OverviewComponent },
    { path: 'profile', component: ProfileComponent },
    { path: 'reports', component: ReportsComponent }
];

Резюме

Мы установили файл начальной маршрутизации в корневой каталог нашего приложения Angular2. Этот файл маршрута направляет трафик на один из двух макетов в зависимости от того, аутентифицирован ли пользователь или нет. Если у них есть аутентификация для любого маршрута, который используется публичный макет или безопасный макет. Затем каждый из этих макетов имеет кучу дочерних маршрутов и компонентов, которые подаются на соответствующий макет.

Итак, чтобы очистить структуру файла,

root = /

Основные маршруты приложений, которые контролируют, какой макет просматривается.

/app.routing.ts

Макеты, которые содержат защищенные или общедоступные макеты.

Public

`/layouts/public.components.ts
/layouts/public.components.html
/layouts/public.routing.ts`

Secure

`/layouts/secure.components.ts
/layouts/secure.components.html
/layouts/secure.routing.ts`

общедоступный каталог, который содержит все, что открыто для просмотра без auth.

/public/home-component.ts
/public/home-component.html

Защищенный каталог, в котором содержатся необходимые маршруты и компоненты, необходимые для авторизации.

/public/profile-component.ts
/public/profile-component.html