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 {

}

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


7

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

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

на ваш app.module.ts

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


С удовольствием, сэр :)
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

app.module.ts

import { MyRoutingModule } from './MyRoutingModulePath';

  @NgModule({
  imports: [
    MyRoutingModule
  ])

Хотя это может ответить на вопрос авторов, в нем отсутствуют некоторые поясняющие слова и ссылки на документацию. Фрагменты исходного кода не очень полезны без некоторых фраз. Вы также можете найти очень полезным, как написать хороший ответ . Пожалуйста, отредактируйте свой ответ.
hellow

В моем позднем ответе нет ничего оригинального. Я изо всех сил пытался реализовать решения, найденные в Интернете. Экзостинг, запутанный и затратный по времени из-за моих архитектурных особенностей. Я искал короткий ответ, чтобы указать мне решение, вместо того, чтобы научить меня процессу. После того, как мне это наконец удалось, для меня стало очевидно, что трудно наблюдать на полных примерах. Конечно, есть много способов потерпеть неудачу. Но многие проиграют так же, как и я. Этот ответ для тех, кто так близок к тому, чтобы исправить это, но далек от того, чтобы понять это правильно.
profimedica
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.