"маршрутизатор-выход" не является известным элементом

У меня есть проект mvc 5 с угловым интерфейсом. Я хотел добавить маршрутизацию, как описано в этом уроке https://angular.io/guide/router. Итак, в моем _Layout.cshtml я добавил

<base href="/">

и создал мою маршрутизацию в моем приложении.module. Но когда я запускаю это, я получаю следующую ошибку:

Error: Template parse errors:
    'router-outlet' is not a known element:
    1. If 'router-outlet' is an Angular component, then verify that it is part       of this module.
    2. If 'router-outlet' is a Web Component then add 'CUSTOM_ELEMENTS_SCHEMA'   to the '@NgModule.schemas' of this component to suppress this message. ("
    <a routerLink="/dashboard">dashboard</a>
    </nav>
    [ERROR ->]<router-outlet></router-outlet>
     "): ng:///AppModule/[email protected]:0

В моем app.component строка

<router-outlet></router-outlet>

дает ошибку, сообщая мне, что Visual Studio не может разрешить тег 'router-outlet'. Любые предложения, как я могу исправить эту ошибку? Я пропускаю ссылку или импорт или что-то не замечаю?

Ниже приведены мои package.json, app.component и app.module

package.json

{
  "version": "1.0.0",
  "name": "app",
  "private": true,
  "scripts": {},
  "dependencies": {
    "@angular/common": "^4.2.2",
    "@angular/compiler": "^4.2.2",
    "@angular/core": "^4.2.2",
    "@angular/forms": "^4.2.2",
    "@angular/http": "^4.2.2",
    "@angular/platform-browser": "^4.2.2",
    "@angular/platform-browser-dynamic": "^4.2.2",
    "@angular/router": "^4.2.2",
    "@types/core-js": "^0.9.41",
    "angular-in-memory-web-api": "^0.3.2",
    "bootstrap": "^3.3.7",
    "core-js": "^2.4.1",
    "graceful-fs": "^4.0.0",
    "ie-shim": "^0.1.0",
    "minimatch": "^3.0.4",
    "reflect-metadata": "^0.1.10",
    "rxjs": "^5.0.1",
    "systemjs": "^0.20.12",
    "zone.js": "^0.8.12"
  },
  "devDependencies": {
    "gulp": "^3.9.1",
    "gulp-clean": "^0.3.2",
    "gulp-concat": "^2.6.1",
    "gulp-tsc": "^1.3.2",
    "gulp-typescript": "^3.1.7",
    "path": "^0.12.7",
    "typescript": "^2.3.3"
  }
}

app.module:

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

import { AppComponent } from './app.component';
import {DashboardComponent} from "./dashboard/dashboard.component"    

const appRoutes: Routes = [
{
    path: '',
    redirectTo: '/dashboard',
    pathMatch: 'full',
    component: DashboardComponent
},  
{
    path: 'dashboard',
    component: DashboardComponent
}
];
@NgModule({
imports: [
    RouterModule.forRoot(appRoutes),
    BrowserModule,
    FormsModule               
],
exports: [RouterModule],
declarations: [
    AppComponent,  
    DashboardComponent      
],
bootstrap: [AppComponent]
})
export class AppModule {

}

app.component:

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

@Component({
selector: 'my-app',
template: '
          <h1>{{title}}</h1>
          <nav>
          <a routerLink="/dashboard">dashboard</a>
          </nav>
          <router-outlet></router-outlet>
          '
})
export class AppComponent {
    title = 'app Loaded';

}

Ответ 1

Попробуйте:

@NgModule({
imports: [
    BrowserModule,
    RouterModule.forRoot(appRoutes),
    FormsModule               
],
declarations: [
    AppComponent,  
    DashboardComponent      
],
bootstrap: [AppComponent]
})
export class AppModule {

}

Нет необходимости настраивать экспорт в AppModule, потому что AppModule не будет импортироваться другими модулями в вашем приложении.

Ответ 2

Попробуй это:

Импортируйте RouterModule в свой app.module.ts

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

Добавьте RouterModule в свой imports []

как это:

 imports: [    RouterModule,  ]

Ответ 3

Предполагая, что вы используете Angular 6 с angular-cli и создали отдельный модуль маршрутизации, который отвечает за действия маршрутизации - настройте маршруты в массиве Routes. Убедитесь, что вы объявляете RouterModule в массиве export. Код будет выглядеть так:

@NgModule({
      imports: [
      RouterModule,
      RouterModule.forRoot(appRoutes)
     // other imports here
     ],
     exports: [RouterModule]
})
export class AppRoutingModule { }

Ответ 4

Если вы выполняете модульное тестирование и получаете эту ошибку, тогда RouterTestingModule в ваш app.component.spec.ts или в RouterTestingModule ваших рекомендуемых компонентов

import { RouterTestingModule } from '@angular/router/testing';

Add RouterTestingModule into your imports [] like 

describe('AppComponent', () => {

  beforeEach(async(() => {    
    TestBed.configureTestingModule({    
      imports: [    
        RouterTestingModule    
      ],
      declarations: [    
        AppComponent    
      ],    
    }).compileComponents();    
  }));

Ответ 5

Это работает для меня, когда я добавляю следующий код в app.module.ts

@NgModule({
...,
   imports: [
     AppRoutingModule
    ],
...
})

Ответ 6

Его просто лучше создать компонент маршрутизации, который будет обрабатывать все ваши маршруты! От документации углового сайта! Это хорошая практика!

ng генерировать модуль app-routing --flat --module = приложение

Вышеупомянутый CLI создает модуль маршрутизации и добавляет в ваш модуль приложения все, что вам нужно сделать из сгенерированного компонента, чтобы объявить ваши маршруты, также не забудьте добавить это:

exports: [
    RouterModule
  ],

к вашему дизайнеру ng-модуля, поскольку он не поставляется с созданным модулем приложения-маршрутизации по умолчанию!

Ответ 7

Спасибо, пример редактора героя, где я нашел правильное определение:

Когда я создаю модуль маршрутизации приложения:

ng generate module app-routing --flat --module=app

и обновите файл app-routing.ts, чтобы добавить:

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

Вот полный пример:

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

import { DashboardComponent }   from './dashboard/dashboard.component';
import { HeroesComponent }      from './heroes/heroes.component';
import { HeroDetailComponent }  from './hero-detail/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 {}

и добавьте AppRoutingModule в импорт app.module.ts:

@NgModule({
  declarations: [
    AppComponent,
    ...
  ],
  imports: [
    BrowserModule,
    FormsModule,
    AppRoutingModule
  ],
  providers: [...],
  bootstrap: [AppComponent]
})

Ответ 8

Эта проблема была и со мной. Простой трюк.

 @NgModule({
  imports: [
   .....       
  ],
 declarations: [
  ......
 ],

 providers: [...],
 bootstrap: [...]
 })

используйте его, как в приведенном выше порядке. Сначала импортирует объявления. Он работал для меня.

Ответ 9

В вашем файле app.module.ts

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

const appRoutes: Routes = [
{
    path: '',
    redirectTo: '/dashboard',
    pathMatch: 'full',
    component: DashboardComponent
},  
{
    path: 'dashboard',
    component: DashboardComponent
}
];

@NgModule({
imports: [
    BrowserModule,
    RouterModule.forRoot(appRoutes),
    FormsModule               
],
declarations: [
    AppComponent,  
    DashboardComponent      
],
bootstrap: [AppComponent]
})
export class AppModule {

}

Добавьте этот код. Удачного кодирования.

Ответ 10

Вот быстрое и простое решение, если кто-либо получает ошибку:

"Роутер-аутлет" не является известным элементом "в угловом проекте,

Затем,

Просто перейдите в файл app.module.ts и добавьте следующую строку:

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

А также "AppRoutingModule" в импорте.