1

Я пытаюсь разобраться в работе над блоками с угловым 2 (RC5), создав базовую структуру сайта с двумя разделами, приветствуем и поддерживаем (подумайте о странице входа и главный сайт). Я установил его в соответствии с документами Angular 2 на функциональных модулях, один для приветственного раздела и один для бэкэнд. Он правильно по умолчанию использует приветственный компонент, но моя кнопка в приветственном компоненте, который должен ссылаться на «бэкэнд», отправляется вместо «приветствия/бэкэнд». Ввод в URL с помощью just/backend идет/backend/welcome. Вот мой app.routing.ts файл:Угловой модуль 2 ленивый-загрузочный не работает

import { Routes, RouterModule } from '@angular/router'; 

export const routes: Routes = [ 
    { path: '', redirectTo: 'welcome', pathMatch: 'full'}, 
    { path: 'backend', loadChildren: 'app/backend/backend.module' } 
]; 

export const routing = RouterModule.forRoot(routes); 

И мой welcome.routing.ts:

import { RouterModule } from '@angular/router'; 

import { WelcomeComponent } from './welcome.component'; 

export const routing = RouterModule.forChild([ 
    { path: 'welcome', component: WelcomeComponent} 
]); 

И мой welcome.component.ts:

import { Component } from '@angular/core'; 

@Component({ 
    template: ` 
     <h2>Welcome</h2> 
     <nav><a routerLink="backend">Login</a></nav> 
    ` 
}) 
export class WelcomeComponent { } 

Во всяком случае, вот бухнуться всего приложения, чтобы сделать его проще Plunkr. Те, которые имеют значение, находятся в приветственных и вспомогательных папках. При нажатии кнопки «Войти» следует указать «Бэкэнд» с кнопкой «Выход», которая вернет вас на страницу приветствия.

Любые предложения будут оценены.

+0

dont вам нужен backend.route.ts, а затем маршрут на ваш backend.component.ts? ваш пример не похож на угловой пример 2 ленивой загрузки. https://angular.io/resources/live-examples/ngmodule/ts/plnkr.html – crh225

+0

@ crh225 Их пример использования немного отличается. Они имеют навигацию в app.component, которая используется для навигации по всем маршрутам. Мне нужно было связать внутри функционального модуля с другим функциональным модулем. Это было частью моей путаницы.И да, часть исправления заключалась в том, чтобы добавить backend.route.ts. Вы можете увидеть весь код в моем решении ниже. – Jason

ответ

2

Я, наконец, работаю, выясняя, что маршрутизатор стекирует маршруты из вложенных модули (например, «backend» в app.routing и «backend» в backend.routing приводит к «/ backend/backend» в качестве URL-адреса). Таким образом, решение состояло в том, чтобы иметь backend.routing.ts с одним маршрутом {path: '', component: BackendComponent}. Также необходимо было добавить значения/to для значений routerLink (например,/backend вместо backend). Вот мои последние backend.routing.ts:

import { Routes, RouterModule } from '@angular/router'; 
import { BackendComponent } from './backend.component'; 

const routes: Routes = [ 
    { path: '', component: BackendComponent } 
]; 

export const routing = RouterModule.forChild(routes); 

И backend.module.ts:

import { NgModule } from '@angular/core'; 
import { CommonModule } from '@angular/common'; 
import { BackendComponent } from './backend.component'; 
import { routing } from './backend.routing'; 

@NgModule({ 
    imports: [ routing ], 
    declarations: [ BackendComponent ] 
}) 
export default class BackendModule { } 

welcome.component.ts:

import { Component } from '@angular/core'; 

@Component({ 
    template: ` 
     <h2>Welcome</h2> 
     <nav><a routerLink="backend">Login</a></nav> 
    ` 
}) 
export class WelcomeComponent { } 

backend.component.ts

import { Component } from '@angular/core'; 

@Component({ 
    template: ` 
     <h2>Backend</h2> 
     <nav><a routerLink="welcome">Logout</a></nav> 
    ` 
}) 
export class BackendComponent { } 

В результате появилась кнопка входа в систему taki ng me to/backend и кнопка выхода из системы, которая приведет меня в/приветствовать, как ожидалось. Вот ссылка на плунж: Plunker

+0

вы можете связаться с плунжером, 10x –

+0

Несомненно, теперь я добавил. – Jason

4

С вашим plunkr было много чего не так. Вот рабочий пример https://plnkr.co/edit/QciaI8?p=preview

Ссылка маршрутизатор был перемещен в app.component

import { Component } from '@angular/core'; 

@Component({ 
    selector: 'my-app', 
    template: ` 
     <h1>Module Test</h1> 
     <nav><a routerLink="../backend">Logins</a></nav> 
     <router-outlet></router-outlet> 
    ` 
}) 
export class AppComponent { } 

Также нужно backend.routing.ts

import { Routes, 
     RouterModule } from '@angular/router'; 

import { BackendComponent } from './backend.component'; 

const routes: Routes = [ 
    { path: '', redirectTo: 'backend', pathMatch: 'full'}, 
    { path: 'backend', component: BackendComponent } 
]; 

export const routing = RouterModule.forChild(routes); 

Backend.module было изменено на

import { NgModule }  from '@angular/core'; 
import { CommonModule } from '@angular/common'; 
import { BackendComponent } from './backend.component'; 
import { routing }   from './backend.routing'; 

@NgModule({ 
    imports:  [ routing ], 
    declarations: [ BackendComponent ] 
}) 
export default class BackendModule { } 
+0

Спасибо за информацию crh225. К сожалению, перемещение кнопки входа в приложение app.component.ts не соответствует моим требованиям, и маршрут для бэкэнд в конечном итоге ведет себя забавно. Ваш код привел меня к правильному решению, которое я добавил в качестве ответа. Ключ должен иметь маршрут с пустым путем в backend.routing. {path: '', компонент: BackendComponent} Маршрутизатор, похоже, объединяет маршруты от модуля к модулю (например, «бэкэнд») в app.routing и «backend» в backend.routing результаты в «/ backend/backend» в качестве URL-адреса). – Jason