Приложение маршрутизации Angular 2 — ошибка объявления модуля маршрутизации

#angular #typescript #routing

#angular #typescript #маршруты

Вопрос:

Я изучаю Angular 2 из официального руководства https://angular.io/docs/ts/latest/tutorial/toh-pt5.html . И у меня есть некоторые проблемы с маршрутизацией. сообщение об ошибке: Тип DashboardComponent является частью объявлений 2 модулей: AppRoutingModule и AppModule! Я не знаю, в чем моя ошибка, я думаю, что у меня все так же, как в учебнике.

Сообщение об ошибке:

Сообщение об ошибке

Мой код:

AppModule

 import { NgModule }       from '@angular/core';
import { BrowserModule }  from '@angular/platform-browser';
import { FormsModule }    from '@angular/forms';

import { AppComponent }         from './app.component';
import { DashboardComponent }   from './dashboard.component';
import { HeroDetailComponent }  from './hero-detail.component';
import { HeroesComponent }      from './heroes.component';
import { HeroService }          from './hero.service';

import { AppRoutingModule }     from './app-routing.module';

@NgModule({
  imports: [
    AppRoutingModule,
    BrowserModule,
    FormsModule,

  ],
  declarations: [
    AppComponent,
    DashboardComponent,
    HeroDetailComponent,
    HeroesComponent
  ],
  providers: [ HeroService ],
  bootstrap: [ AppComponent ]
})
export class AppModule { }
  

Приложение-модуль маршрутизации

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

import { DashboardComponent }   from './dashboard.component';
import { HeroesComponent }      from './heroes.component';
import { HeroDetailComponent }  from './hero-detail.component';

const routes: Routes = [
  { path: '', redirectTo: '/dashboard', pathMatch: 'full' },
  { path: 'dashboard',  component: DashboardComponent },
  { path: 'detail/:id', component: HeroDetailComponent },
  { path: 'heroes',     component: HeroesComponent }
];

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

Компонент приложения

 import {Component} from "@angular/core";
/**
 * Created by lukasfrajt on 13.10.16.
 */


@Component({
  selector: 'my-app',
  template: `
    <h1>{{title}}</h1>
    <nav>
        <a routerLink="/heroes">Heroes</a>
        <a routerLink="/dashboard">Dashboard</a>
    </nav>    
    <router-outlet></router-outlet>`
})
export class AppComponent {
    title = 'Tour of Heroes'
}
  

Компонент панели мониторинга

 import {Component} from "@angular/core";
import {Hero} from "./hero";
import {HeroService} from "./hero.service";
import {Router} from "@angular/router";


@Component({
  selector: 'my-dashboard',
  moduleId: module.id,
  templateUrl: `dashboard.component.html`
})
export class DashboardComponent {
    heroes: Hero[] = [];

  constructor(private heroService: HeroService , private  router: Router)
  {

  }
  ngOnInit(): void{
    this.heroService.getHeroes()
      .then(heroes => this.heroes = heroes.slice(1, 5));

  }
  gotoDetail(hero: Hero): void {
    let link = ['/detail', hero.id];
    this.router.navigate(link);
  }
}
  

Спасибо за помощь

Комментарии:

1. вы опубликуете свою структуру папок, index.html , и systemjs.config

2. Да, конечно github.com/coklin3107/Angular_Tutorial/tree/master/Fifth Я буду очень благодарен, если вы мне поможете @Bean0341

3. Все, что я могу найти, это несколько небольших синтаксических деталей, но я не думаю, что они достаточно велики, чтобы вызвать вашу проблему, я перенес весь ваш код в plunkr, и он работает нормально: / вещи, которые вы должны изменить, включают в себя: В компоненте Dashboard поместите свой модуль. идентификатор перед вызовом вашего селектора. В вашем компоненте приложения добавьте ‘ModuleID: module. идентификатор’ также перед вашим селектором. Также в вашем index.html поместите свой base href в самом начале вашего «<тега head>».

4. Я сделал то, что вы сказали, но все равно ничего:/ . Может быть, может помочь вам проблема начинается, когда я выполняю эту часть руководства по рефакторингу маршрутов в модуль маршрутизации angular.io/docs/ts/latest/tutorial/toh-pt5.html до рефакторинга все было в порядке, так что, возможно, здесь та же ошибка, но я не знаю..

5. Честно говоря, я знаю, что это не то, что вы хотите услышать, но зачем создавать свой модуль routes? просто оставьте как компонент, ха-ха, и оставьте этот пост, чтобы кто-нибудь разобрался 🙂

Ответ №1:

Я столкнулся с точно такой же проблемой, и основная причина заключается в том, что версии кода и модуля angular НЕ совпадают. У моего модуля angular была версия RC5, но я использую коммерческий образец кода. Итак, я только что обновил версию angular, и все в порядке.

Комментарии:

1. Большое вам спасибо 🙂

2. Как вы нашли версию Angular, с которой работаете? Я могу найти версию npm (4.2.0), но не Angular (если у меня нет фундаментального непонимания того, что означает npm, что, безусловно, возможно xD)

Ответ №2:

У меня была аналогичная ошибка на полпути в разделе «Маршрутизация» руководства, которая в конечном итоге была вызвана отсутствующей круглой скобкой, а не импортом DashboardComponent . Возможно, это была просто ошибка «я», хотя вам никогда не указывалось добавлять этот оператор импорта в учебное пособие, поэтому не исключено, что у кого-то еще также возникнет эта проблема.