Навигация по маршрутизатору Angular 6 не отображает дочерний компонент в целевом компоненте

У меня есть приложение Angular 6 с компонентом входа в систему и компонентом панели инструментов. Я пытаюсь перейти к DashboardComponent в событии нажатия кнопки входа в систему. DashboardComponent содержит дочерний компонент WardComponent. Но при переходе к панели управления он отображает только содержимое, отличное от дочернего компонента ward. Как я могу отобразить компонент панели мониторинга с дочерним компонентом после входа в систему?

Пожалуйста, посмотрите мои классы компонентов ниже

AppComponent

<router-outlet></router-outlet>

LoginComponent.ts

  export class LoginComponent {
  constructor(private router: Router) {}

  login() {
    this.router.navigate(["/dashboard/"]);
  }
}

DashboardComponent

import { Component } from "@angular/core";
@Component({
  selector: "dashboard",
  template: `
    haii u r in dashboard compo

    <div class="form-inline" style="padding: 40px;">
      <ward *ngFor="let ward of wards" [wardNumber]="ward"></ward>
    </div>
  `
})
export class DashboardComponent {
  constructor() {}
}

WardComponent.ts

import { Component, Input } from "@angular/core";
@Component({
  selector: "ward",
  template: `
    <div class="card bg-light mb-3" style="max-width: 18rem;">
      <div class="card-header"></div>
      <div class="card-body">
        <h2 class="card-title">{{ wardNumber + 1 }}</h2>
        <button class="btn btn-primary" (click)="checkIn()">check in</button>
        <button class="btn btn-primary" (click)="checkOut()">check Out</button>
      </div>
    </div>
  `
})
export class WardComponent {
  @Input() wardNumber: Number;
  checkedIn: boolean = false;
  constructor() {}

  checkIn() {
    console.log("checked in");
    this.checkedIn = true;
  }

  checkOut() {}
}

app.module.ts

  const indexRoutes: Route = {
  path: "",
  component: DashboardComponent
};
// for all invalid routers , it will redirect to login component
const fallbackRoutes = {
  path: "**",
  component: LoginComponent
};

const routes: Routes = [
  indexRoutes,

  {
    path: "dashboard",
    component: DashboardComponent
  },

  {
    path: "ward",
    component: WardComponent
  },

  fallbackRoutes
];

@NgModule({
  declarations: [
    AppComponent,
    WardComponent,
    LoginComponent,
    DashboardComponent
  ],
  imports: [BrowserModule, RouterModule.forRoot(routes)],
  providers: [],
  bootstrap: [AppComponent]
})
export class AppModule {}

person Ansar Samad    schedule 30.11.2018    source источник
comment
Проверьте содержимое wards в Dashboard, возможно, оно не заполнено   -  person Ashish Ranjan    schedule 30.11.2018
comment
вы правы, я добавил содержимое вардов не в то место, вместо того, чтобы добавлять массив вардов в WardComponent, я поместил это в AppComponent. большое спасибо   -  person Ansar Samad    schedule 30.11.2018


Ответы (3)


Просто измените свою Routes конфигурацию следующим образом:

const routes: Routes = [
  {
    path: "dashboard",
    component: DashboardComponent,
    children: [{
      path: "ward",
      component: WardComponent
    }]
  },
  {
    path: "",
    pathMatch: "full",
    redirectTo: "/dashboard"
  },
  {
    path: "**",
    component: LoginComponent
  }
];

@NgModule({...})
export class AppModule {}

Я добавил pathMatch: 'full' и redirectTo: '/dashboard' к path: ''. Я также избавился от const, а затем добавил маршруты для этих const в сам routes const.

Вам также нужно будет добавить <router-outlet></router-outlet> в шаблон DashboardComponent

person SiddAjmera    schedule 30.11.2018
comment
после добавления приведенного выше фрагмента он не отображает компонент входа в систему, а напрямую отображает компонент панели мониторинга. Я попытался добавить indexroutes, и он отобразил компонент входа в систему. но он по-прежнему показывает то же поведение, не отображая дочерний компонент даже после добавления маршрутизатора-розетки - person Ansar Samad; 30.11.2018
comment
@AnsarSamad, в идеале можно было бы предотвратить путь к Dashboard через CanActivate охранник, чтобы предотвратить несанкционированный доступ к нему. Вы можете реализовать один, а затем проверить, вошел ли пользователь в систему или нет. Если пользователь не вошел в систему, просто переместите пользователя по /login пути. - person SiddAjmera; 30.11.2018

Это из-за того, что содержимое компонента вардов не заполнено правильно. Я добавил содержимое вардов в неправильное место, вместо того, чтобы добавлять массив вардов в WardComponent, я поместил это в AppComponent.

person Ansar Samad    schedule 30.11.2018

Добавьте маршрут Ward в дочерний массив, например

const routes: Routes = [
    indexRoutes,
    {
        path: "dashboard",
        component: DashboardComponent,
        children:[
        {
             path: "ward",
             component: WardComponent
        }]
    },
    fallbackRoutes
   ];
person Vijay    schedule 18.09.2019
comment
На этот вопрос уже ответил сам OP, опубликованный некоторое время назад. Публикуя ответ, убедитесь, что вы добавили либо новое решение, либо существенно лучшее объяснение, особенно при ответах на старые вопросы. - person help-info.de; 18.09.2019