Angular2 - 'router-outlet' - неизвестный элемент

79

Я создал маршруты с глубокими дочерними путями. Я добавил <router-outlet>в компонент AdminComponent, который заключил в NgModule. Но после обновления страницы я получил такую ​​ошибку:

'router-outlet' is not a known element

Возможно это произошло из-за того, что я забыл импортировать какой-то модуль в admin.module.ts

Пожалуйста помоги. Благодарю.

app.routes.ts

export const routes: Routes = [
    {
        path: '',
        component: AppComponent,
        children: [
            {
                path: '',
                component: LoginComponent
            },
            {
                path: 'admin',
                component: AdminComponent
            },
            {
                path: 'user',
                component: UserComponent
            },
            {
                path: 'there',
                component: ThereComponent
            }
        ]
    }
]

app.module.ts

@NgModule({
    imports: [
        BrowserModule,
        AppRoutes,
        FormsModule,
        ReactiveFormsModule,
        HttpModule,
        RouterModule,
        TranslateModule.forRoot({
            provide: TranslateLoader,
            useFactory: (http: Http) => {
                return new TranslateStaticLoader(http, './src/assets/i18n', '.json')
            },
            deps: [Http]
        }),
        UserComponentModule,
        AdminComponentModule,
        LoginComponentModule,
        ThereComponentModule,
        DashboardComponentModule
    ],
    declarations: [
        AppComponent
    ],
    providers: [
        FormBuilder
    ],
    bootstrap: [AppComponent]
})

admin.component.ts и admin.module.ts

//  admin.component.ts
import {Component} from "@angular/core";

@Component({
    selector: 'admin',
    template: "<router-outlet></router-outlet>",
})

export class AdminComponent {
    constructor() {

    }
}

//  admin.module.ts
const ADMIN_DECLARATION = [
    AdminComponent
];

@NgModule({
    imports: [
        BrowserModule,
        TranslateModule,
        FormsModule,
        ReactiveFormsModule
    ],
    declarations: [
        ADMIN_DECLARATION
    ],
    exports: [
        ADMIN_DECLARATION
    ],
    providers: [
        TranslateService,
        FormBuilder
    ]
})

export class AdminComponentModule {

}
Станислав П
источник
Мне просто не хватало;
Мехрадж Малик

Ответы:

87

AdminComponentявляется частью , AdminComponentModuleи вы не импортировали RouterModuleвнутри AdminComponentModuleмодуля:

//  admin.component.ts
import {Component} from "@angular/core";

@Component({
    selector: 'admin',
    template: "<router-outlet></router-outlet>",
})

export class AdminComponent {
    constructor() {

    }
}

//  admin.module.ts
const ADMIN_DECLARATION = [
    AdminComponent
];

@NgModule({
    imports: [
        BrowserModule,
        TranslateModule,
        RouterModule,
        FormsModule,
        ReactiveFormsModule
    ],
    declarations: [
        ADMIN_DECLARATION
    ],
    exports: [
        ADMIN_DECLARATION
    ],
    providers: [
        TranslateService,
        FormBuilder
    ]
})

export class AdminComponentModule {

}
ranakrunal9
источник
Привет @yankee, я использую функцию ленивого модуля, и я отделил файл app.routing.module.ts. если я включаю 'import {AppRoutingModule} from' ./app-routing.module '; и импортировать в app.module.ts, тогда я снова сталкиваюсь с проблемой stackoverflow.com/questions/49670232/… .
Попросите
46

вы не экспортировали RouterModule.

@NgModule({
  imports: [RouterModule.forRoot(routes)],
  exports: [RouterModule]
})
Ченгкуру Майкл
источник
1
Да сэр. Спасибо!
Jonca33
7

Добавьте этот код

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

на ваш app.module.ts

Работал у меня.

Pulkit219
источник
С удовольствием, сэр :)
pulkit219
Спасибо, это помогло мне .... Обычно спрашиваю, вы, ребята, читаете все документы с веб-сайтов или просто знаете что-то по опыту ????
Gvs Akhil
@Akhil С удовольствием, нет, я просто посмотрел, как ты, и мне помог какой-то комментарий. Мне никогда не было легко читать документацию!
pulkit219 07
4

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

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

//and then write within imports
@NgModule({
  declarations: [
    AppComponent,
    NavbarComponent
  ],
  imports: [
    BrowserModule,
    **routing**,
    EmployeeModule
  ],
Кумар Абхишек
источник
0

Это работает для меня:

Добавьте схему [NO_ERRORS_SCHEMA]в AppModule.

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

@NgModule({
  schemas : [NO_ERRORS_SCHEMA]  
})
Кондас Ламар-младший
источник
0

app.module.ts

import { MyRoutingModule } from './MyRoutingModulePath';

  @NgModule({
  imports: [
    MyRoutingModule
  ])
profimedica
источник
Хотя это может ответить на вопрос авторов, в нем отсутствуют некоторые поясняющие слова и ссылки на документацию. Фрагменты исходного кода не очень полезны без некоторых фраз. Вы также можете найти очень полезным, как написать хороший ответ . Пожалуйста, отредактируйте свой ответ.
hellow
В моем позднем ответе нет ничего оригинального. Я изо всех сил пытался реализовать решения, найденные в Интернете. Экзостинг, запутанный и затратный по времени из-за моих архитектурных особенностей. Я искал короткий ответ, чтобы указать мне решение, вместо того, чтобы научить меня процессу. После того, как мне это наконец удалось, для меня стало очевидно, что трудно наблюдать на полных примерах. Конечно, есть много способов потерпеть неудачу. Но многие проиграют так же, как и я. Этот ответ для тех, кто так близок к тому, чтобы исправить это, но далек от того, чтобы понять это правильно.
profimedica