Не удается сопоставить маршруты в Angular 2.1

Я использую Angular 2.1.0 в проекте AspNetCore Visual Studio 2015, и у меня возникла проблема с маршрутизацией в моих ленивых загружаемых модулях. Ошибка выглядит следующим образом:

core.umd.js: 3257 ИСКЛЮЧЕНИЕ: Не перехвачено (в обещании): Ошибка: невозможно сопоставить ни один маршрут. Сегмент URL-адреса: «Домашняя страница / Мой список» Ошибка: не удается сопоставить ни один маршрут. Сегмент URL: 'Home / MyList' в ApplyRedirects.noMatchError (http://localhost:31534/libraries/@angular/router/bundles/router.umd.js:769:20) на CatchSubscriber.eval [как селектор] (http://localhost:31534/libraries/@angular/router/bundles/router.umd.js:747:33) в CatchSubscriber.error (http://localhost:31534/libraries/rxjs/operator/catch.js:52:31) на MapSubscriber.Subscriber._error (http://localhost:31534/libraries/rxjs/Subscriber.js:128:26) на MapSubscriber.Subscriber.error (http://localhost:31534/libraries/rxjs/Subscriber.js:102:18) на MapSubscriber.Subscriber._error (http://localhost:31534/libraries/rxjs/Subscriber.js:128:26) на MapSubscriber.Subscriber.error (http://localhost:31534/библиотеки/rxjs/Subscriber.js:102:18) на MapSubscriber.Subscriber._error (http://localhost:31534/libraries/rxjs/Subscriber.js:128:26) на MapSubscriber.Subscriber.error (http://localhost:31534/libraries/rxjs/Subscriber.js:102:18) на LastSubscriber.Subscriber._error (http://localhost:31534/libraries/rxjs/Subscriber.js:128:26)

Я следил за учебным курсом по героям и адаптировал его в соответствии с здесь ленивая загрузка темы Я сначала загружаю страницу входа {Home/Login} в модуль начальной загрузки под названием AppModule. При нажатии кнопки входа в систему я хочу показать следующую страницу MyList, {Home/MyList}, которая лениво загружается в функциональный модуль с именем MyModule.

MyModule основан на HeroModule из второй ссылки выше.

MyList страница и связанный с ней компонент - это первая страница / компонент в MyModule, который также имеет MyListDetail страницу / компонент {Home/MyListDetail}.

Я перехожу к {Home/MyList} нажатием кнопки, используя этот код

let link = ['Home/MyList'];
this.router.navigate(link);

Почему мои маршруты не обнаруживаются? Вот как я их настраиваю.

app-routing.module.ts

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

export const routes: Routes = [
  { path: '', redirectTo: 'Home/Login', pathMatch: 'full'},
  { path: 'Home/MyList', loadChildren: 'scripts/My.Module#MyModule' }  

];

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

login-routing.module.ts

import { NgModule }            from '@angular/core';
import { Router, RouterModule }        from '@angular/router';

import { LoginCmpnt }  from './Login';

@NgModule({
  imports: [RouterModule.forChild([
    { path: 'Home/Login', component: LoginCmpnt}
  ])],
  exports: [RouterModule]
})
export class LoginRoutingModule {}

MyList-routing.module.ts

import { NgModule }            from '@angular/core';
import { Routes } from '@angular/router';
import { RouterModule }        from '@angular/router';
import { SharedModule } from './shared.module';
import { MyComponent } from './MyComponent';
import { MyListComponent }  from './MyListComp';
import { MyListDetailComponent }  from './MyListDetailComp';

const routes: Routes = [
  { path: '',
    component: MyComponent,
    children:   [{ path: 'Home/MyList',    component: MyListComponent },
         { path: 'Home/MyListDetail/:id', component: MyListDetailComponent }]
  }];

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

export class MyListRoutingModule {}

В MyList-routing.module выше, что я должен указать для пути против MyComponent? Метод входа в систему перенаправляется на Home/MyList

ИЗМЕНИТЬ

Даже это с косой чертой перед путем в щелчке входа в систему не работает.

let link = ['/Home/MyList'];
this.router.navigate(link);

person user20358    schedule 25.10.2016    source источник
comment
Вы пробовали let link = ['/Home/MyList']; (добавлено /)?   -  person Günter Zöchbauer    schedule 25.10.2016
comment
да. Это тоже не сработало. Мои маршруты не устанавливаются с предыдущей косой чертой. Я также попытался добавить косую черту в настройках, когда добавил ее в код кнопки входа в систему   -  person user20358    schedule 25.10.2016
comment
Вы не должны устанавливать маршруты с ведущей косой чертой, но если вы не переходите к родственному или дочернему маршруту, вы должны добавить ведущую косую черту при навигации к маршруту.   -  person Günter Zöchbauer    schedule 25.10.2016
comment
Я тоже пробовал эту комбинацию. По-прежнему нет работника.   -  person user20358    schedule 25.10.2016
comment
Я не говорю, что это единственная возможная причина, но из вашего вопроса это не очевидно, где у вас есть routerLink. Требуется ли начальная косая черта или нет, зависит от того, где находится routerLink. Поэтому возможно, что вам это не нужно. Я не использовал дочерние маршруты из других модулей и поэтому не знаю других возможных причин.   -  person Günter Zöchbauer    schedule 25.10.2016
comment
Модуль / компонент входа в систему и модуль / компонент MyList находятся в одной папке.   -  person user20358    schedule 25.10.2016
comment
Дело не в том, находятся ли они в одной папке, а в том, можно ли достичь нового маршрута по относительному пути. Для относительной навигации / можно не указывать.   -  person Günter Zöchbauer    schedule 25.10.2016
comment
Я думаю, что они могут быть, потому что, когда я набираю его в адресной строке браузера, он работает, но код, переходящий по этой ссылке, не работает.   -  person user20358    schedule 25.10.2016
comment
единственный способ проверить, доступен ли путь из вызывающего модуля, - это посмотреть, находятся ли они в одном месте или нет, или мне нужно подняться по папке или нет. Какой еще есть способ?   -  person user20358    schedule 25.10.2016
comment
Не уверен, о каких папках вы говорите, но пути маршрутов и папки, содержащие компоненты (если это те папки, о которых вы говорите), не должны коррелировать, и с routerLink важны только пути маршрута.   -  person Günter Zöchbauer    schedule 25.10.2016
comment
Код нажатия кнопки входа в систему находится в модуле, который загружается при первом вызове URL-адреса. Страница "Мой список" должна вызываться лениво после нажатия кнопки входа в систему, и, насколько мне известно, она находится по тому же пути. Требуется ли какое-либо изменение пути после его ленивой загрузки? Я тоже использовал полный URL, и это тоже не сработало. Я последовал примеру из ссылок, которые я предоставил в вопросе выше. Не уверен, что не так с определением маршрута.   -  person user20358    schedule 25.10.2016
comment
Есть несколько вопросов о маршрутах в ленивых модулях, на которые уже есть хорошие ответы. Как уже упоминалось, я сам еще не использовал это и не могу здесь помочь. У меня просто было подозрение, что есть что-то неясное об абсолютных и относительных путях, и я попытался сгладить это ;-)   -  person Günter Zöchbauer    schedule 25.10.2016
comment
ах. хорошо, не волнуйтесь. немного помогает :) Я без особого успеха пытался найти ответы на эту проблему с маршрутами   -  person user20358    schedule 25.10.2016


Ответы (1)


Модуль с ленивой загрузкой может выглядеть примерно так:

 export class default MyModule{

 }

а в app.routing вы больше всего используете load Child.

person Meysam Valiolahi    schedule 25.10.2016